当前位置:  开发笔记 > 编程语言 > 正文

你如何清除stringstream变量?

如何解决《你如何清除stringstream变量?》经验,为你挑选了6个好方法。

我已经尝试了几件事,

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

两者都不起作用.



1> Wilka..:

对于所有标准库类型,成员函数empty()是查询,而不是命令,即它意味着"你是空的吗?" 不要"请丢掉你的内容".

所述clear()成员函数从继承ios和用于清除流的错误状态,例如,如果一个文件流具有设定为错误状态eofbit(结束文件),则调用clear()将设置错误状态返回goodbit(无差错) .

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

m.str("");

是正确的,虽然使用:

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

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


当你忘记"clear()"部分时会发生这种情况.http://stackoverflow.com/q/2848087/635549
@KshitijBanerjee我认为在C++中,m.str()和m.str("")是两个不同的函数.m.str()调用一个不期望任何参数的函数,而m.str("")将调用接受const char*参数的函数.m.str()可能已经实现为**get**函数,它返回字符串,而m.str("")可能已经实现为**set**函数.
正如Galath所说,添加m.clear()非常重要; 除了m.str("");.否则,如果在某些时候用字符串流填充字符串流,则可能会出现问题.

2> Nikos Athana..:

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

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

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


@ 101010:如何交换比移动分配更好?
GNU g ++ v4.8中仍缺少功能,请参阅http://stackoverflow.com/questions/24429441/c-compiler-does-not-recognize-stdstringstreamswap
与此处的所有其他答案相比,这是最有效和最优雅的方式.但是,std :: stringstream :: swap是一个c ++ 11特性,这个解决方案不适用于以前的c ++ 11编译器.

3> CodingWithou..:
m.str("");

似乎工作.


似乎工作......流状态和ios标志怎么样?
这将由OP中指定的.clear()清除.

4> 小智..:

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

m=std::stringstream();


我遇到了同样的问题,对我来说'mm.clear(); mm.str("");`做了伎俩.(没有C++ 11,否则交换会更好).

5> 小智..:

我总是在考虑它:

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

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

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



6> Francisco Co..:

我的2美分:

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

//clear the stringstream variable

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

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

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有