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