C++ sstream的使用

本文详细介绍了C++中sstream库的使用方法,包括istringstream、ostringstream和stringstream三种类的基本操作,以及如何利用这些类进行数据转换和字符串流的读写。文章还提供了实用函数,如myto_string和myconvert,帮助开发者更高效地处理数据。


  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++文件中的移动文件指针的函数怎么用

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值