sstream库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。[1]
基本操作
1、操作前后: 操作前将string压入sstream,操作后压出
stringstream stream; //声明一个stringstream变量
string str;
...//具体操作
str = stream.str(); //从steam中提取刚插入的整型数 ,等效于stream >> str;
2、具体操作
a\可跳过空格
std::stringstream ss;
ss << 100 << ' ' << 200;
int foo,bar;
ss >> foo >> bar;
//rslt: foo==100,bar==200
b\尽量识别,不可识别时则为0
ss << 100 << ',' << 200;
int foo,bar;
ss >> foo >> bar;
//rslt: foo=100,bar=200
实用函数
1、myto_string()
STL中的to_string()不能把cstring转string,而下面的函数可以
template<class T>
string myto_string(const T& t)
{
ostringstream oss;//创建一个流
oss<<t;//把值传递如流中
return oss.str();//获取转换后的字符转并将其写入result
}
2、stringsteam的方法str()
该方法使用后,输出流指针总是指向流的最前面
a、不恰当使用
std::stringstream ss;
string str1("123456");
ss.str(str1);
ss<<"hello";
string str2;
ss>> str2;
cout<<str1<<endl;//123456
cout<<str2<<endl;//hello6
b、正确使用
std::stringstream ss;
string str1("123456");
ss.str(str1);
ss.seekp(0,ios::end);
ss<<"hello";
cout<<ss.str()<<endl;//123456hello
cout<<str1<<endl;//123456
3、大多数类型可以用的转换[3]:
template<class out_type, class in_value>
out_type myconvert(const in_value & t)
{
stringstream stream;
stream<<t;//向流中传值
out_type result;//这里存储转换结果
stream>>result;//向result中写入值
return result;
}
string str1("123456");
str1 = myconvert<string,int>(1234);
4、树的序列化和你序列化:
由于代码比较长,就不复制,了请直接到链接 3 看。我想,这段代码没必要考虑效率,它的优点在于可视化。如果注重效率的话,就应该把数据存为二进制流了。
参考链接
[1] C++ stringstream的用法|c++ 字符串流 sstream(常用于格式转换)
[2]std::stringstream::stringstream
[3]c++ stringstream(老好用了)
[4]C++文件中的移动文件指针的函数怎么用
本文详细介绍了C++中sstream库的使用方法,包括istringstream、ostringstream和stringstream三种类的基本操作,以及如何利用这些类进行数据转换和字符串流的读写。文章还提供了实用函数,如myto_string和myconvert,帮助开发者更高效地处理数据。
1849

被折叠的 条评论
为什么被折叠?



