这里指的是 C++ 标准库类型 string,表示可变长的字符序列,使用 string 类型必须首先包含头文件 <string>,作为标准库的一部分,string 定义在命名空间 std 中。
在用 C++ 编程时,可以优先考虑使用 string 来表示及处理字符串,因为它比字符数组更简单,且对库的实现者做出了一些性能上的需求。因此,标准库类型对于一般应用场合来说有足够的效率。

定义和初始化 string 对象
可以进行默认初始化、直接初始化和拷贝初始化。
- 可以通过默认的方式初始化一个 string 对象,这样就会得到一个空的 string,也就是说该 string 对象中没有任何字符。
- 如果使用等号(=)初始化一个变量,实际上执行的是拷贝初始化,编译器把等号右侧的值拷贝到新创建的对象中去;与之相反,如果不使用等号,则执行的是直接初始化。
string s1; // 默认初始化,s1是一个空字符串
string s2 = s1; // 拷贝初始化
string s3(s1); // 直接初始化
string s4 = "hiya"; // 拷贝初始化
string s5("hiya"); // 直接初始化
string s6(10, 'c'); // 直接初始化,把 s6 初始化为由连续 10 个 c 组成的串
当初始值只有一个时,使用直接初始化或拷贝初始化都行,如果向上面 s6 那样初始化要用到的值有多个,一般来说只能使用直接初始化的方式,但非要用拷贝初始化的方式来处理也不是不可以,不过需要显式地创建一个临时对象用于拷贝:
string s7 = string(10, 'c'); // 拷贝初始化
string 的 empty 和 size 操作
empty 函数根据 string 对象是否为空返回一个对应的布尔值,它是 string 的一个成员函数,调用该函数的方法很简单,只要使用点操作符指明是哪个对象执行了 empty 函数就可以。
size 函数返回 string 对象的长度,即 string 对象中字符的个数,其返回的是一个 string::size_type 类型的值,尽管我们不太清楚 string::size_type 类型的细节,但有一点是可以肯定的:它是一个无符号类型的值,而且能足够存放下任何 string 对象的大小。
由于 size 函数返回的是一个无符号整型数,因此切记,如果在表达式中混用了带符号数和无符号数将可能产生意想不到的结果。
比较 string 对象
string 定义了几种用于比较字符串的运算符,包括相等性运算符(== 和 !=)和关系运算符(<, <=, >, >=),这些运算符逐一比较 string 对象中的字符,并且对大小写敏感。
相等性运算符(== 和 !=)分别检验两个 string 对象相等或不相等,string 对象相等意味着它们的长度相同而且所包含的字符也全部相同。
关系运算符(<, <=, >, >=)分别检验一个 string 对象是否小于、小于等于、大于、大于等于另外一个 string 对象。上述这些运算符都依照(大小写敏感的)字典顺序:
- 如果两个 string 对象的长度不同,而且较短 string 对象的每个字符都与较长 string 对象对应位置上的字符相同,就说较短 string 对象小于较长 string 对象。
- 如果是两个 string 对象在某些对应的位置上不一致,则 string 对象比较的结果其实是 string 对象中第一对相异字符比较的结果。
两个 string 对象相加
两个 string 对象相加得到一个新的 string 对象,其内容是把左侧的运算对象与右侧的运算对象串接而成。
字面值和 string 对象相加
当把 string 对象和字符字面值或字符串字面值混在一条语句中使用时,必须确保每个加法运算符(+)的两侧的运算对象至少有一个是 string:
string s4 = s1 + ", "; // 正确
string s5 = "hello" + ", "; // 错误:两个运算对象都不是 string
string s6 = s1 + ", " + "world"; // 正确!!!
string s7 = "hello" + ", " + s2; // 错误:不能把字面值直接相加
需要注意的是上面的 s6,其中子表达式 s1 + ", " 的结果是一个 string 对象,它同时作为第二个加法运算符的左侧运算对象,因此与下面的语句是等价的:
string tmp = s1 + ", "; // 正确
string s6 = tmp + "world"; // 正确
548

被折叠的 条评论
为什么被折叠?



