关于c ++:如何清除stringstream变量?

How do you clear a stringstream variable?

我已经试过几次了,

1
2
3
std::stringstream m;
m.empty();
m.clear();

这两个都不起作用。


对于所有标准库类型,成员函数empty()是一个查询,而不是一个命令,即它的意思是"你是空的吗?"不是"请扔掉你的东西"。

clear()成员函数继承自ios并用于清除流的错误状态,例如,如果文件流的错误状态设置为eofbit(文件结束),则调用clear()将错误状态设置回goodbit(无错误)。

用于清除stringstream的内容,使用:

1
m.str("");

是正确的,尽管使用:

1
m.str(std::string());

技术上更有效,因为您避免调用采用const char*std::string构造函数。但是现在的任何编译器都应该能够在这两种情况下生成相同的代码——所以我只使用更具可读性的代码。


您可以清除错误状态并在一行中清空strignstream

1
std::stringstream().swap(m); // swap m with a default constructed stringstream

这有效地将m重置为默认构造状态


1
m.str("");

似乎起作用了。


无论编译器如何,这都应该是最可靠的方法:

1
m=std::stringstream();


我一直在审视它:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
    std::stringstream ss;
    ss <<"what";
}

{
    std::stringstream ss;
    ss <<"the";
}

{
    std::stringstream ss;
    ss <<"heck";
}

我的2分钱:

在xcode和dev-c++中,这似乎对我有用,我有一个菜单形式的程序,如果按照用户的请求迭代执行,它将填充一个stringstream变量,该变量在代码第一次运行时可以正常工作,但下次用户运行相同代码时不会清除stringstream。但是下面的两行代码在填充字符串变量之前,每次最后都会清除stringstream变量。(2小时的试错和谷歌搜索),顺便说一句,单独使用每一行不会有什么效果。

1
2
3
4
5
6
7
//clear the stringstream variable

sstm.str("");
sstm.clear();

//fill up the streamstream variable
sstm <<"crap" <<"morecrap";


这是一个概念问题。

Stringstream是一个流,因此其迭代器是向前的,无法返回。在输出字符串流中,需要使用flush()重新初始化它,就像在任何其他输出流中一样。


这些不会丢弃GNU C++中的STRIGSTATH流中的数据。

1
2
3
    m.str("");
    m.str() ="";
    m.str(std::string());

以下内容确实为我清空了Stringstream:

1
    m.str().clear();