概述
< sstream > 定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作。但用的最多的是stringstream类支持C风格的串流的输入输出操作。
stringstream输入输出
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
//可以看到stringstream对象既可以做输入流也可以做输出流
stringstream ostr;
ostr << "dasda"; //将字符串读入 stringstream流
string gstr = ostr.str(); //stringstream流 变成字符串
cout << gstr << endl;
string s;
ostr >> s; //将 stringstream流读入到字符串,stringstream流为空了
cout << s<<endl;
return 0;
}
输出:
dasda
dasda
stringstream转换数据类型
stringtream最常用于string与各种内置数据类型的转换。
#include <iostream>
#include <sstream>
#include <string>
#include<cstdlib>
using namespace std;
int main()
{
stringstream sstr;
//--------int转string-----------
int a = 100;
string str;
sstr << a;
sstr >> str;
cout << str << endl;
sstr.clear(); //如果你想通过使用同一stringstream对象实现多种类型的转换,请注意在每一次转换之后都必须调用clear()成员函数。
//--------string转int-----------
string str2 = "1500";
int b;
sstr << str2;
sstr >> b;
cout << b << endl;
sstr.clear();
//--------string转double-----------
string str3 = "192.65";
double c;
sstr << str3;
sstr >> c;
cout << c << endl;
sstr.clear();
//--------double转string-----------
double d = 865.65;
string str4;
sstr << d;
sstr >> str4;
cout << str4 << endl;
sstr.clear();
//--------string转char[]--------
string name = "gooda";
char charname[200];
sstr << name;
sstr >> charname;
cout << charname<<endl;
sstr.clear();
//--------char[]转string--------
string name2;
char charname2[200]= "hhahha";
sstr << charname2;
sstr >> name2;
cout << name2<<endl;
}
输出:
100
1500
192.65
865.65
gooda
hhahha
stringstream用于空格分割的字符串的切分
对有一些字符串,比如用 “/”、","等区分,可以先转换为空格,然后再通过stringstream流对空格进行分割。
#include<iostream>
#include<sstream>
using namespace std;
int main() {
stringstream ss;
string s = "I/love/you/very/much";
for (int i = 0; i<s.size(); i++) {
if (s[i] == '/') {
s[i] = ' ';
}
}
ss << s;
string temp;
while (ss >> temp) {
cout << temp << endl;
}
return 0;
}
输出:
I
love
you
very
much