C++中的字符串读入我们通常是用 cin>>str; 它只要碰到空格或者换行符就意味着本字符串读取结束,且不会读取空格和换行符(相当于丛输入流中丢掉)。
而getline函数读取一行字符串,可以读入空格,遇到换行符结束(从输入流中丢掉该换行符),且紧跟后续的getline不会读取到该换行符。但是,注意一点就是:如果只读入了一个换行符(敲了回车),这个换行符虽然不会被读入,但是它会被当作结束符,这个时候什么也没有读入。
举例:
#include<string>
#include<iostream>
using namespace std;
int main()
{
string str1,str2;
cin>>str1>>str2;
cout<<str1<<endl;
cout<<str2<<endl;
string line;
getline(cin,line);//遇到回车,结束,不能继续读入
if(line.empty())
cout<<"empty";
}
输入输出:
zyhz
lc
zyhz
lc
empty
唉,有时候可能会遇到这样的OJ题目,先读入一个整数,再读入若干行带有空格的字符串。
其实学C的时候就碰到过类似的问题,不过后来很长时间没遇到了,也很少再用scanf,printf,gets之类的函数。
再次碰到输入问题的时候,很是惭愧,好多地方都出了差错。
第一次,我竟然想用cin>>string去读取带有空格的字符串,可笑!!!
第二次,我把gets()和getline()混用,出现了意想不到的错误,应该是输入流方式的不同造成的。
以后再也不会将C里面的输入与C++的一块混用了,之前也碰到过这样莫名其妙的错误,但没有引起足够的重视,这次可算被教训了!