题
我已经尝试过几件事了
std::stringstream m;
m.empty();
m.clear();
两者都不起作用。
解决方案
对于所有标准库类型的成员函数 empty()
是一个查询,而不是一个命令,即这意味着“你是空的吗?”不是“请扔掉您的内容”。
这 clear()
成员函数继承自 ios
用于清除流的错误状态,例如如果文件流的错误状态设置为 eofbit
(文件结尾),然后调用 clear()
会将错误状态设置回 goodbit
(没有错误)。
用于清除a的内容 stringstream
, , 使用:
m.str("");
是正确的,尽管使用:
m.str(std::string());
从技术上讲更有效,因为您避免调用 std::string
构造函数需要 const char*
. 。但是现在任何编译器都应该能够在这两种情况下生成相同的代码 - 所以我会选择更具可读性的代码。
其他提示
您可以在一行中清除错误状态并清空 strignstream
std::stringstream().swap(m); // swap m with a default constructed stringstream
这有效地将 m 重置为默认构造状态
m.str("");
似乎有效。
无论编译器如何,这应该是最可靠的方法:
m=std::stringstream();
我总是在界定它的范围:
{
std::stringstream ss;
ss << "what";
}
{
std::stringstream ss;
ss << "the";
}
{
std::stringstream ss;
ss << "heck";
}
我的 2 美分:
这似乎在 xcode 和 dev-c++ 中对我有用,我有一个菜单形式的程序,如果根据用户的请求迭代执行,将填充一个 stringstream 变量,该变量在代码第一次运行时可以正常工作运行但在用户下次运行相同的代码时不会清除字符串流。但是下面的两行代码每次在填充字符串变量之前最终都会清除字符串流变量。(2小时的反复试验和谷歌搜索),顺便说一句,单独使用每一行是行不通的。
//clear the stringstream variable
sstm.str("");
sstm.clear();
//fill up the streamstream variable
sstm << "crap" << "morecrap";
这是一个概念问题。
Stringstream是一个流,所以它的迭代器是向前的,不能返回。在输出字符串流中,您需要一个flush()来重新初始化它,就像在任何其他输出流中一样。
这些不会丢弃 gnu c++ 中字符串流中的数据
m.str("");
m.str() = "";
m.str(std::string());
以下内容为我清空了字符串流:
m.str().clear();
不隶属于 StackOverflow