你如何清除stringstream变量?

时间:2008-08-21 18:35:58

标签: c++ stringstream

我已经尝试了几件事,

std::stringstream m;
m.empty();
m.clear();

这两个都不起作用。

8 个答案:

答案 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();