C++字符串读取函数小结
简单总结下C++字符串读取函数的使用.
由于有一些微小的差异不容易记忆,在这里整理下目前看到的C++的字符串读取函数
面向单词的读取
std::cin
直接读取,正如前面总结的cin会跳过空字符。
面向行的读取
cin.getline()
通过换行符确定输入结尾,读取但不保存换行符(用空字符代替换行符),调用举例1
2char name[20];
std::cin.getline(name, 20); // 包含字符不超过19个cin.get()
调用方式和确定结尾方式均与cin.getline()
相同,但是不读取换行符,换行符仍保留在流中,因此若要连续读入行要使用变体cin.get()
将换行符跳过,例如:1
2
3std::cin.get(name, 20);
std::cin.get();
std::cin.get(name, 20);由于返回对象仍是
cin
,因此可连续调用1
cin.get(name, 20).get();
注意:
当std::cin.get()
函数读取到空行时会返回false
,但是在较早的C++标准中的std::cin.get()
版本读取空行后并不会返回false
,而是将字符串中的第一个字符设为空字符'\0'
getline()
对于string对象的读取,使用的是getline()
函数,例如:1
2std::string str;
getline(std::cin, str);若读取失败,返回
false
cin.ignore()
该函数接受两个参数,一个实数字,制定要读取的最大字符数;另一个是字符用作输入分界符。例如下面的函数调用读取斌丢弃接下来的255个字符或者知道达到第一个换行符:1
cin.ignore(255, '\n');
函数原型:
1
istream & ignore(int = 1, int = EOF);
cin.getline()
VS cin.get()
cin.get()
可以通过判断下一个字符是否是换符\n
来判断是否是读取整行而停止还是数组填满cin.getline()
由于吞掉了\n
则无法判断