目录
字符串相关
1. 输入一行字符串(字符串里可能含有空格)
由于c++中的cin默认以“空格、回车、tab”作为结束标志,因此直接cin>>str这种方式只能拿到字符串空格以前的字符串。在这种情况下,应当采用如下方式:
string str;
getline(cin,str);
使用getline需要注意一些问题:
使用循环输入字符串时:
string str;
while(getline(cin,str)
{
char s;
cin >>s;
cin.ignore();//需要加上这一行,否则会出现第二次循环读不出s的情况
}
2.输入一行字符串(字符串里含有逗号)
2.1 对于含有一个逗号的情况:可以自己加一个for来自己分开为两个字符串
string str;
cin>>str;
string str1;
string str2;
for(int i=0;i<str.size();i++)
{
if(str[i]==',')
{
str1.substr(0,i);
str2.substr(i+1,str.size()-i-1);
}
}
2.2 对于含有多个逗号的情况:可以利用istringstream(头文件#include)
string str;
cin>>str;
vector<string> vec;
for(int i=0;i<str.size();i++)
{
if(str[i]==',') str[i]=' ';
}
istringstream out(str);
while(out>>str)
{
vec.push_back(str);
}
2.3 对于含有多个逗号的情况:2.2的方法还是过于麻烦,可以用stringstreeam来读取(头文件#include)
string str;
getline(cin,str);
stringstream ss(str);
while(getline(ss,str,','))
{
cout<<str<<" ";
}
也可以这样
string str;
while(getline(cin,str))
{
string key1,key2;
stringstream ss(str);
getline(ss,key1,' ');
getline(ss,key2,' ');
}
2.3.1 stringstream的一些应用
实现字符串倒序:
输入:girl a am i;输出:i am a girl
string s;
getline(cin,s); //输入字符串s,可带空格
stringstream ss(s); //定义一个字符串流ss,并用字符串s去初始化;
string res=" ";
while (getline(ss,s,' '))
{
if (res==" ")
res=s;
else
res=s+" "+res;
}