C++ string类getline()用法实例详解
作者:Alkali!
有时候我们希望在最终的字符串中保留输入时的空白符,这时候应该用getline函数来替代原来的>>运算符。( cin 不能输入包含嵌入空格的字符串)
getline函数的参数是一个输入流和一个string对象,原型是:getline(cin,string对象)
,函数从给定的输入流中读入内容,直到遇到换行符为止,但是此时的换行符要被读入,然后把所读入的内容存到string对象中,但此时不存入最后那个换行符。
在<string>
中的getline
函数有四种重载形式:
istream& getline (istream& is, string& str, char delim);
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream& is, string& str);
istream& getline (istream&& is, string& str);
读取的istream是作为参数is传进函数的,读取的字符串保存在string类型的str中。
函数的变量:
- is :表示一个输入流,例如 cin。
- str :string类型的引用,用来存储输入流中的流信息。
- delim :char类型的变量,所设置的截断字符;在不自定义设置的情况下,遇到’\n’,则终止输入。
getline只要遇到换行符就停止读入并且返回string对象,哪怕一开始输入就是换行符也是如此,只不过会返回一个空的string对象。和输入运算符一样,getline也会返回它的流参数,所以可以用getline的结果作为条件。
//参考代码 #include<iostream> #include<string> using namespace std; int main() { string line;//每次读入一整行,直到遇到换行符结束读入 while (getline(cin,line)) if (!line.empty()) cout << line << endl; system("pause"); return 0; }
分析一下while(getline(cin,line))
(注意:这里默认回车符停止读入,按Ctrl+Z(Windows)(Ctrl+D(Linux))
即可退出循环。)
这个语句中,while判断语句的真实判断对象是cin的状态,也就是判断当前是否存在有效的输入流。
而输入流是对象,判断的是流返回的状态。所以正常的情况下,你怎么输入都是跳不出它的循环。
在这之中可能会用些人误以为while判断语句的判断对象是line(也就是line是否为空),想通过回车来跳出循环,却发现不能跳出循环。
而回车和设置的终止符都是终止getline()函数的读取操作的。但是while判断语句判断的是getline()函数的输入流是否有效。
到此这篇关于C++ string类getline()用法详解的文章就介绍到这了,更多相关C++ string类getline()内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!