【问题标题】:How to clear stringstream? [duplicate]如何清除字符串流? [复制]
【发布时间】:2010-05-17 09:59:24
【问题描述】:
stringstream parser;

parser << 5;
short top = 0;
parser >> top;
parser.str(""); //HERE I'M RESETTING parser

parser << 6; //DOESN'T PUT 6 INTO parser
short bottom = 0;
parser >> bottom;

为什么它不起作用?

【问题讨论】:

    标签: c++ stringstream


    【解决方案1】:

    通常要“重置”字符串流,您需要使用 str 将底层序列重置为空字符串,并使用 clear 清除任何失败和 eof 标志。

    parser.str( std::string() );
    parser.clear();
    

    通常发生的情况是第一个&gt;&gt; 到达字符串的末尾并设置eof 位,尽管它成功解析了第一个short。此后对流的操作立即失败,因为流的 eof 位仍然设置。

    【讨论】:

    • 我个人认为parser.str("") 更清晰,但这是见仁见智的问题。
    • 可能值得编辑此答案以将 parser.clear() 放在首位,因为除非首先调用 clear,否则将内容添加到流的其他方法(例如 parser
    • @T.E.D. ,我认为这种方式效率更高一些,因为您避免在 const char * 上调用字符串构造函数
    • @Mhd.Tahawi - 在某些情况下,尤其是那些涉及固有缓慢的事情的情况,例如调整大小/破坏动态分配的容器,在这种情况下,为为了一些理论上的微观优化。
    • parser.str({});
    猜你喜欢
    • 2011-10-19
    • 2010-09-06
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 2011-03-08
    • 2014-01-26
    相关资源
    最近更新 更多