stringstream 是 C++ 提供的专门用于处理字符串的 输入输出 流类。
在C++中,将数据从一个对象到另一个对象的流动抽象为“流”。流在使用前要被创建,使用后要被删除。
stringstream 定义于头文件
typedef basic_stringstream
向对象输入字符串 : "<<" 表示向一个对象中输入
stringstream ss;
ss << s;
在创建对象的时候使用字符串初始化:
stringstream ss("hello stringstream");
cout << ss.str() << endl;
上两种ss的区别:
include
include
using namespace std;
int main()
{
string str("asd");
// 第二种构造
stringstream ss2(str);
cout << ss2.str() << endl;
// 第一种构造
ss2 << "r";
cout << ss2.str() << endl;ss2 << "13";
cout << ss2.str() << endl;ss2 << "hy";
cout << ss2.str() << endl;return 0;
}
/*
输出:
asd
rsd
r13
r13hy
*/
可以发现,利用第一种构造函数创建对象时,输入字符串后直接进行字符串拼接,而第二种构造方式,在进行字符串拼接时,首先把原本的字符串覆盖掉,之后再进行拼接。
如果不想原来的字符串被覆盖,则需要换一种构造方式,如下:#include <iostream>
#include <sstream>
using namespace std;int main()
{ostringstream ss("1 2 3 4 ", std::ios_base::ate); // append 方式追加cout << ss.str() << endl;ss << "5 3 4";cout << ss.str() << endl;return 0;
}
/*
输出:
1 2 3 4
1 2 3 4 5 3 4
*/
stringstream进行类型转换:
int num = 123;
std::stringstream ss;
ss << num; // 将整数放入流中
std::string str = ss.str();
利用 stringstream 指定字符分割字符串
上面描述了利用 stringstream 去除字符串空格,其实就是利用空格来分割字符串,同样,也可以指定其他字符对字符串进行分割,这需要与 getline() 函数搭配使用,下面以逗号分割字符串为例:getline 详解:
getline()的原型是istream& getline ( istream &is , string &str , char delim );其中 istream &is 表示一个输入流,例如,可使用cin;string str ; getline(cin ,str)也可以使用 stringstreamstringstream ss(“test#”) ; getline(ss,str)char delim表示遇到这个字符停止读入,通常系统默认该字符为’\n’,也可以自定义字符