第三章 字符串、向量和数组
3.1 命名空间的using声明
调用命名空间使用域操作符(::),使用using 声明(using declaration)可以无需使用域操作符,每个名字都需要独立的using声明,头文件不应该包含using声明。
3.2 标准库类型string
string可以用来表示可变长的字符序列。使用前必须包含string头文件,using std::string。
3.2.1 定义和初始化string对象
string的默认初始化是空字符串。使用等号初始化执行的是拷贝初始化 (copy initialization),编译器把等号右侧初始值拷贝至新创建的对象中去。不用等号则是直接初始化(direct initialization)。
3.2.2 string对象的操作
输入 在输入时会自动忽略开头的空白(空格符、换行符、制表符等),然后从第一个真正的字符读到下一个空白为止。使用while可以读取在非法对象前所有字符。getline只要遇到换行符就会执行操作并返回结果。(换行符是抛弃,得到的string中不包含换行符)
String.empty 得到是bool类型,可以使用判断语句,size函数返回string对象长度,得到的是string::size_type类型,是一个无符号类型的值(因为长度不能为负数)。c++11中使用auto可以去推断得到一个是unsigned int。
比较string,逐一比较大小,并且对大小写敏感。
1、如果两个string对象长度不同,较短string对象的每个字符都与较长string对象对应相同,
则 较短<较长。
2、位置上如果不一致,则结果是第一对相异字符比较的结果。
string赋值可以直接使用等于号赋值,相加则是两个字符串的融合。
字面值和string对象相加,混在一条语句中使用时,必须确保每个加法运算符两侧至少有一个是string
字符串字面值和string是不同的类型。
3.2.3 处理string对象中的字符
如果想对string中的每个字符进行操作,使用范围 for(range for)语句遍历每个元素并操作
For(declaration: expression) statement
每次迭代,declaration部分变量会初始化为expresstion部分的下一个元素值
for(auto c :s ) 对于s中的每一个元素c
改变自己可以使用引用
for(auto &c : s) c =toupper ( c );
如果只想处理部分数值:
1、使用下标
下表运算符([ ])接受参数是string::size_type,从0开始计数s[0]是第一个 s[s.size()-1]是最后一个
2、使用迭代器
把第一个词改成大写形式
逻辑与运算符(&&)只有左侧为真才会去检测右侧,左侧是index达到s.size大小之前才会继续判断。