如何清除std :: ostringstream实例以便可以重用它?

时间:2012-07-12 19:13:29

标签: c++ string std stringstream

  

可能重复:
  How to reuse an ostringstream?

我一直在使用std::ostringstreamfloatint值转换为字符串,但无论如何都无法重复使用实例。为了说明我的意思,以下是我尝试用来清除流的方法

 #include <iostream>
 #include <sstream>
 using namespace std;

 int main() {
   ostringstream stream;
   stream << "Test";
   cout << stream.str() << endl;  
   stream.flush();                
   stream << "----";
   cout << stream.str() << endl; 
   stream.clear();
   stream << "****";
   cout << stream.str() << endl;
   return 0;
 }

生成输出

 Test
 Test----
 Test----****

这给我一个问题,因为我必须创建许多ostringstream的实例,这是浪费的。很明显clear()flush()没有做我需要的,所以有办法做到这一点吗?我查看了http://www.cplusplus.com/reference/iostream/ostringstream/处的文档,但似乎没有任何内容可以满足我的需求。有没有办法重置或清除流?

2 个答案:

答案 0 :(得分:18)

使用stream.str("");使基础字符串为空字符串。更好的是,不要重复使用对象。在C ++中,理念是在需要时创建一个对象,并在完成后处理它:

{
    std::ostringstream oss;
    oss << 10;
    std::cout << oss.str();
}

{
    std::ostringstream oss;
    oss << 20.5;
    std::cout << oss.str();
}

或者更好:

std::cout << static_cast<std::ostringstream&>(std::ostringstream() << 10).str();

答案 1 :(得分:10)

clear()仅清除错误标志。这是一个常见的错误。你想调用str(),并传递一个空字符串来清除缓冲区:

stream.str("");

会做你想做的事。