读入带空格的字符串
string str;
getline(cin,str);
cout<<str<<endl;
如果我们想将字符串按照空格分割开,并且取得其中的每一段字符串,就需要用到stringstream对象。
stringstream对象的用法
string str;
getline(cin,str);
stringstream line(str);
//使用字符串str生成一个名为line的stringstream对象
string s;
while(line >> s){ //将其中的每一段字符串逐行取出到s中
cout<<s<<endl;
}
cin.ignore()
用于在读取数据时忽略缓冲区的一个字符,即调用了这个函数之后,如果接下来发生数据读取,那么将会忽略本次读取的第一个数据。如果在getline()之前有读取过数据,并且数据以换行符结尾,就需要使用此函数来忽略换行符,否则geline()会读到一个只包含换行符的空字符串。而在getline()之后再使用getline(),则不需要清除换行符,因为getline()会默认将一行中的换行符连同字符串一起读走。
用法举例:
int x;
cin>>x; //先读取一个整数,输入数据时,整数后面带有一个回车符
string str;
cin.ignore(); //如果不使用此函数,接下来的getline将读取到一个回车符而结束
getline(cin,str);
cout<<str<<endl;
关于getline()之后再调用getline(),不调用cin.ignore()也可以正常读取,调用了反而会使得下一个字符串失去第一个字符:
string str1,str2;
getline(cin,str1);
getline(cin,str2);
cout<<str1<<endl;
cout<<str2<<endl;
大佬,打天梯的时候就被这个搞崩溃了好一会,然后试出来用getline()吸收回车符才险拿铜,这个总结太有用了
哈哈我也是的,不知道怎么用c++读字符串,只不过当时是临时想到可以用python做
考场的时候自己花了一个小时硬试出来真的好惊险,没时间写后面的题了都(主要是不会py(哭
🥺好强