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

来源:互联网 发布:淘宝卖家手机端装修 编辑:程序博客网 时间:2024/06/08 18:22

由于需要循环向流中写入数据,以此来拼成一个需要的字串,且需要多次使用。在这里的需求下,自己想当然的以为是该类中也有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



原创粉丝点击