stringstream
头文件 #include
stringstream 可以使string与各种内置类型数据之间的转换,本文不做讲解
本文主要利用其流的特性;
基本语法
//输入
stringstream ss1;
ss1<< "qwe";
//输出
string str;
stringstream ss2("qwe");
ss2 >>str ;
getline()
头文件:
getline()的原型是istream& getline ( istream &is , string &str , char delim );
其中 istream &is 表示一个输入流,
例如,可使用cin;
string str ; getline(cin ,str)
也可以使用 stringstream
stringstream ss("test#") ; getline(ss,str)
char delim表示遇到这个字符停止读入,通常系统默认该字符为’\n’,也可以自定义字符
字符串分割
当我们直接利用getline(),自定义字符,从cin流中分割字符,例如
输入 “one#two”
string str;
ss << str2;
while (getline(cin, str, '#'))
cout << str<< endl;
system("pause");
return 0;
输出结果为
one
后面的 two并没有输出;
此时如果我们是用stringstream 流
例如
int main()
{
string str;
string str_cin("one#two#three");
stringstream ss;
ss << str_cin;
while (getline(ss, str, '#'))
cout << str<< endl;
system("pause");
return 0;
}
得到的结果为
one
two
three
因此,如果我们想得到类似于split 函数的效果
可以使用 stringstream 与getline 结合的方法
c++ 实现 split
vector<string> split(string str, char del) {
stringstream ss(str);
string temp;
vector<string> ret;
while (getline(ss, temp, del)) {
ret.push_back(temp);
}
return ret;
}
int main()
{
string str_cin("one#two#three");
vector<string> res= split(str_cin, '#');
for (auto c : res)
cout << c << endl;
system("pause");
return 0;
}