<基于 C++ Primer P77>
string 的操作
os << s // 将 s 写到输出流 os 当中,返回 os
is >> s // 从 is 中读取字符串赋给 s,字符串以空白分隔,返回 is
getline(is, s) // 从 is 中读取一行赋给 s,返回 false
s.empty() // s 为空返回 true,否则返回 false
s.size() // 返回 s 中字符的个数
s[n] // 返回 s 中第 n 个字符的引用,位置 n 从 0 计起
s1 + s2 // 返回 s1 和 s2 连接后的结果
s1 = s2 // 用 s2 的副本代替 s1 中原来的字符
s1 == s2 // 如果 s1 和 s2 中所含的字符完全一样,则它们相等;string 对象的相等性判断
s1 != s2 // 对字母的大小写敏感
<, <=, >, >= // 利用字符在字典中的顺序进行比较,且对字母的大小写敏感
1.读写 string 对象
在执行读写操作时,string 对象会自动忽略开头的空白(即空格符、换行符、制表符等)并从第一个真正的字符开始读起,直到遇到下一处空白为止。
2.读取未知数量的 string 对象
int main()
{
string word;
while (cin >> word)
cout << word << endl;
return 0;
}
3.使用 getline 读取一整行
如果希望在最终得到的字符串中保留输入时的空白符,应该使用 getline 函数代替原来的 >> 运算符。getline 函数只要一遇到换行符就结束读取操作并返回结果,触发 getline 函数返回的那个换行符实际上被丢弃掉了,得到的 string 对象中并不包含换行符。
4.string 的 empty 和 size 操作
5.string::size_type 类型
(1)string 类及其他大多数标准库类型都定义了几种配套的类型,这些配套的类型体现了标准库类型与机器无关的特性。在具体使用的时候,通过作用域操作符来表明名字 size_type 是在类 string 中定义的。
(2)string::size_type 是一个无符号类型的值而且能足够存放下任何 string 对象的大小。所有存放 string 类的 size 函数返回值的变量,都应该是 string::size_type 类型的。
(3)如果一条表达式中已经有了 size() 函数就不要再使用 int 了,这样可以避免混用 int 和 unsigned 可能带来的问题。
6.比较 string 对象
(1)逐一比较 string 对象中的字符,并且对大小写敏感。
(2)字典顺序:
①如果两个 string 对象的长度不同,而且较短 string 对象的每个字符都与较长 string 对象对应位置上的字符相同,则较短 string 对象小于较长 string 对象。
②如果两个 string 对象在某些对应的位置上不一致,则 string 对象比较的结果实际上是 string 对象中第一对相异字符比较的结果。
7.为 string 对象赋值
8.两个 string 对象相加得到一个新的 string 对象,其内容是把左侧的运算对象与右侧的运算对象串接而成。
9.字面值和 string 对象相加,必须确保每个加号运算符的两侧的运算对象至少有一个是 string。切记,字符串字面值与 string 是不同的类型。
string s4 = s1 + ", "; // 正确
string s5 = "hello" + ", "; // 错误
string s6 = s1 + ", " + "world"; // 正确
string s7 = "hello" + ", " + s2; // 错误