c++ - 你如何清除一个 std::ostringstream 实例以便它可以被重用?

标签 c++ string std stringstream

<分区>

Possible Duplicate:
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/ 查看了文档但是那里似乎没有任何东西可以满足我的需要。有没有办法重置或清除流??

最佳答案

使用 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();

关于c++ - 你如何清除一个 std::ostringstream 实例以便它可以被重用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11458980/

相关文章:

android - AVD 安卓 4 : support to OpenGL ES 2. 0

c++ - 用户定义的字符串文字和模式与 sscanf 匹配

c++ - 线程基本..需要帮助

c++ - CMake 无法确定目标 : azurestorage error 的链接器语言

c++ - 如何让用户输入两次以上?

c++ - 找不到 vector 使用中的 fatal error

c++ - 使用返回的 vector

c++ - std::stod 忽略小数点后的非数值

c++ - 结构指针的区别

python - 删除停用词/标点符号,标记并应用 Counter()