首页 文章

你如何清除stringstream变量?

提问于
浏览
426

我已经尝试了几件事,

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

两者都不起作用 .

8 回答

  • -7

    对于所有标准库类型,成员函数 empty() 是查询,而不是命令,即它意味着"are you empty?"不是"please throw away your contents" .

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

    要清除 stringstream 的内容,请使用:

    m.str("");
    

    是正确的,虽然使用:

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

    在技术上更有效,因为你避免调用 std::string 构造函数来获取 const char* . 但是现在任何编译器都应该能够在两种情况下生成相同的代码 - 所以我会选择任何更具可读性的代码 .

  • 33

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

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

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

  • 38
    m.str("");
    

    似乎工作 .

  • 682

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

    m=std::stringstream();
    
  • 32

    我总是在考虑它:

    {
        std::stringstream ss;
        ss << "what";
    }
    
    {
        std::stringstream ss;
        ss << "the";
    }
    
    {
        std::stringstream ss;
        ss << "heck";
    }
    
  • 0

    我的2美分:

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

    //clear the stringstream variable
    
    sstm.str("");
    sstm.clear();
    
    //fill up the streamstream variable
    sstm << "crap" << "morecrap";
    
  • 8

    这是一个概念性问题 .

    Stringstream是一个流,所以它的迭代器是前向的,不能返回 . 在输出字符串流中,您需要flush()来重新初始化它,就像在任何其他输出流中一样 .

  • 11

    这些不会丢弃gnu c中stringstream中的数据

    m.str("");
        m.str() = "";
        m.str(std::string());
    

    以下为我清空stringstream:

    m.str().clear();
    

相关问题