我一直在使用std::ostringstream
将float
和int
值转换为字符串,但无论如何都无法重复使用实例。为了说明我的意思,以下是我尝试用来清除流的方法
#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/处的文档,但似乎没有任何内容可以满足我的需求。有没有办法重置或清除流?
答案 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("");
会做你想做的事。