C++中std::stringstream类型对象如何清除

由于需要循环向流中写入数据,以此来拼成一个需要的字串,且需要多次使用。在这里的需求下,自己想当然的以为是该类中也有clear()的成员函数,结果发现,并不行,也无法清除其中的已经存的数据,造成了字串拼接过多的错误

使用std::stringstream类的clear()成员函数测试结果

#include<iostream>  
#include<string>  
#include<sstream>  
using namespace std;  
  
int main() {  
    stringstream stream;  
    string b;  
    stream.precision(10);  //重设置stream的精度   
    double a = 4.23233;  
    stream << a;          //将浮点数a加入缓存  
    b = stream.str();     //将缓存中的各种数据转换为string类  
    cout << b << endl;  
    stream.clear();      //调用clear()方法  
    double aa = 2.3;  
    stream << aa;        //将浮点数aa加入缓存  
    b = stream.str();    //将缓存中的各种数据转换为string类  
  
    cout << b;  
} 
4.23233
4.232332.3

clear()并没有有将stringstream对象的缓存清空!


解决方法如下:

1、是在使用的地方定义一个作用域比较短的局部变量,拼接完了,然后发送给客户端,然后系统自动释放其内存,下次使用再定义;

2、可以定义一个作用域较大区域,或者定义在类的头文件中都可以,每次拼接完了之后发送给客户端,清理其已存的内容

std::stringstream strm;                                 //用来拼接返回给客户端的排行榜字串
std::string proceMsg;                                   //最终返回给客户端的字串数据
//
//具体的拼接操作
//
strm.str("");
proceMsg = "";

采用上述方法的测试程序:

#include<iostream>  
#include<string>  
#include<sstream>  
using namespace std;  
  
int main() {  
    stringstream stream;  
    string b;  
    stream.precision(10);  //重设置stream的精度   
    double a = 4.23233;  
    stream << a;  
    b = stream.str();  
    cout << b << endl;  
    stream.str("");   //清空缓存  
    double aa = 2.3;  
    stream << aa;  
    b = stream.str();  
    cout << b;  
}   

结果如下

4.23233
2.3



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值