字符串一直是我的一个心病,我决定先解决它。
cpp处理字符串的方式有两种,一种是基于C语言的处理,称为C-风格字符串,另一种是基于string类库的方法。
这里先介绍C—风格字符串,首先c-风格字符串是以\0结尾的字符数组,它是C语言一流的字符串形式,cpp完全兼容,本质是char类型的数组。
- 以空字符结尾,空字符写作\0,ASCII值为0,空字符对于C风格字符串至关重要。
- 打印不以空字符结尾的字符数组时,将会持续打印字符后的数据,直到遇见\0。处理字符串的函数会根据\0来处理,而不是字符串的长度。
- 和普通数组一样,初始化字符如果小于定义的长度,后面都是\0。需要注意的是,如果采用逐个字符会初始化的方式,需要手动添加末尾的\0,否则是不合法的。
- 字符串拼接时,第二个字符串的第一个字符将紧跟第一个字符串的最后一个字符后面,不考虑\0。
- 对于字符串的输入可以说会有一个陷阱吧,牵扯到cin的机制,后面的文章中会提到。
面向行的输入:cin.getline()和getline()
cin.getline():只给char字符数组使用
char str[100];
cin.getline(str,100);
开始读入,最多读取n-1个字符到指定字符数组也就是str。
- 读到换行符时结束
- 读够长度自动结束
- 自动扔掉末尾回车,不残留
- 可以有第三个可选参数:结束字符,也就是规定读到那种字符就停止,比如读到逗号就停止。
getline():只给cpp string字符串使用
string s;
getline(cin,s);
读入字符串s(在string使用时,s本身就是一个字符数组)
- 读到换行符结束
- 丢弃回车,回车不留在缓存区
- 可以有第三个可选参数:结束字符
面向行的输入:cin.get()
专门读取char字符数组/单个字符
char ch;
cin.get(ch);
- 不挑食,不跳过任何空白(空格,回车,制表)
- 末尾回车也读进来
- 缓冲区不会丢弃回车