[017]string类使用注意事项

最近自己写着玩,写了一个这样的函数:

void foo(const string& iStr) {
    for (int i = 0; i < iStr.length(); ++i) {
        string str = iStr.at(i);
    }
}

函数中间还涉及到的其他业务不管,问题在于,写了上面的代码过后,编译不过。

咋一看,这不是很正常么?取得iStr中的一个值,然后赋值给str就行了。

其实不然,因为平常我们用string用习惯了,就会习惯性的以为它是基本类型,可是,它是类类型啊!

于是,当我们采取下面的操作的时候:

string str = iStr.at(i);

iStr.at(i)返回一个const char类型的字符,于是在实例str的时候就会去找string中是否存在const char类型的拷贝构造函数。

结果,没找到,没办法复制对象,就出错了。

void foo(const string& iStr) {
    for (int i = 0; i < iStr.length(); ++i) {
        const char str = iStr.at(i);
    }
}

这样就会没有问题了。

如果我们一定要使用string类型怎么办?可以这样来,利用string保存字符的原理

void foo(const string& iStr) {
    string str;
    for (int i = 0; i < iStr.length(); ++i) {
        str = iStr.at(i);
    }
}

将对象实例和赋值分离开来,就不会出现这样的问题了。

时间: 2024-10-09 10:15:27

[017]string类使用注意事项的相关文章

C++ 常用类 string类

===6.3.2使用string对象=== string word="I love China" *链接字符串* string description=adjective  + " " + word; _Note_: 不能连接两个字符串字面量,下面的语句是错误的 string test= "I have" + "a dream"; ===6.3.3访问字符串中的字符=== *读取字符串* getline(cin, text);

Java 中的 String 类常用方法

字符串广泛应用在Java编程中,在Java中字符串属于对象,String 类提供了许多用来处理字符串的方法,例如,获取字符串长度.对字符串进行截取.将字符串转换为大写或小写.字符串分割等. String 类的常用方法: 注意事项: 1. 字符串 str 中字符的索引从0开始,范围为 0 到 str.length()-1 2. 使用 indexOf 进行字符或字符串查找时,如果匹配返回位置索引:如果没有匹配结果,返回 -1 3. 使用 substring(beginIndex , endIndex

C++ string类及其函数的讲解

文章来源于:http://www.cnblogs.com/hailexuexi/archive/2012/02/01/2334183.html C++中string是标准库中一种容器,相当于保存元素类型为char的vector容器(自己理解),这个类提供了相当丰富的函数来完成对字符串操作,以及与C风格字符串之间转换,下面是对string一些总结<引用> 一,C语言的字符串 在C语言里,对字符串的处理一项都是一件比较痛苦的事情,因为通常在实现字符串的操作的时候都会用到最不容易驾驭的类型——指针.

Scanner的概述与String类的构造和使用_DAY12

1:Scanner的概述(理解) 1)Scanner是JDK5以后出现的方便我们从键盘接受数据的类. 2)Scanner的构造格式: Scanner sc = new Scanner(System.in); System.in 是System类下面有一个静态的成员变量in.它的类型是InputStream. 代表的是标准键盘输入流.也就是键盘录入数据. Scanner是对其进行了封装,提供了各种转换功能.方便我们获取到想要的数据类型的数据. 3)要掌握的两个功能: A:返回int类型 publi

JavaSE入门学习28:Java常用类之String类(下)

七字符串的不变性 String对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同.如 下图所示: 运行结果: 结合上面的代码,关于字符串必须要了解的: 1)通过String s1="爱慕课"; 声明了一个字符串对象, s1存放了到字符串对象的引用,在内存中的存放引用关系如 下图所示: 然后通过s1="欢迎来到:"+s1; 改变了字符串s1 ,其实质是创建了新的字符串对象,变量s1指向了新创建的字符 串对象,如下图所示: 2)一旦

关于c++ string类

(转自百度百科) 首先,为了在我们的程序中使用string类型,我们必须包含头文件 <string>.如下: #include <string> //注意这里不是string.h string.h是C字符串头文件 1.声明一个C++字符串 声明一个字符串变量很简单: string Str; 这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数.上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把Str初始化为一个空字符串.St

std::string类详解

之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够.字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要.我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?).我们尽可以把它看成是C++的基本数据类型. 标准模板库(STL)提供了一个std::string类,其是std::basic_string的一个特化,它是一个容器类,可把字符串当作普通类型来使用,并支持比

C++——string类和标准模板库

一.string类 1.构造函数 string实际上是basic_string<char>的一个typedef,同时省略了与内存管理相关的参数.size_type是一个依赖于实现的整型,是在string中定义的.string类将string::npos定义为字符串的最大长度,通常为unsigned int的最大值.另外,使用缩写NBTS(null-terminated string)来表示以空字符结束的字符串——传统的C字符串.下面的表格中列出了string的构造函数: 构造函数 描述 str

第4篇 Java中的String类

JAVA String类 字符串是常量:它们的值在创建之后不能改变.字符串缓冲区支持可变的字符串.因为 String 对象是不可变的,所以可以共享它们.例如: String str = "abc"; 等效于: char data[] = {'a', 'b', 'c'}; String str = new String(data); 注意事项 常用方法 equals()            判断值是否相等 equalsIgnoreCase() 忽略大小写进行对比 toLowerCase