mat*_*975 6 c++ string std stringstream
可能重复:
如何重用ostringstream?
我一直在使用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;
}
Run Code Online (Sandbox Code Playgroud)
生成输出
Test
Test----
Test----****
Run Code Online (Sandbox Code Playgroud)
这给了我一个问题,因为我不得不创建许多ostringstream浪费的实例.显然clear(),flush()不要做我需要的,所以有办法做到这一点吗?我查看了http://www.cplusplus.com/reference/iostream/ostringstream/上的文档,但似乎没有任何内容可以满足我的需求.有没有办法重置或清除流?
Ker*_* SB 18
使用stream.str("");使底层字符串空单.更好的是,不要重复使用对象.在C++中,理念是在需要时创建一个对象并在完成后处理它:
{
std::ostringstream oss;
oss << 10;
std::cout << oss.str();
}
{
std::ostringstream oss;
oss << 20.5;
std::cout << oss.str();
}
Run Code Online (Sandbox Code Playgroud)
或者更好的是:
std::cout << static_cast<std::ostringstream&>(std::ostringstream() << 10).str();
Run Code Online (Sandbox Code Playgroud)
Max*_*ert 10
clear()只清除错误标志.这是一个常见的错误.你想调用str(),并传递一个空字符串来清除缓冲区:
stream.str("");
Run Code Online (Sandbox Code Playgroud)
会做你想做的.