我有istringstream
,我正在将一些数据放入其中。然后,我提取了一些我输入的数据,然后我想获得istringstream
的剩余内容。我认为,显然是错误的,以下情况就是这样:
std::istringstream stream("Two words");
std::string word;
stream >> word;
std::cout << word << std::endl;
std::cout << stream.str() << std::endl;
输出结果为:
Two words
Two
Two words
换句话说,提取操作返回正确的值,它正在推进读指针,如tellg
所示,但str
似乎并不关心 - 它只返回istringstream
的全部原始内容。
我确信这是预期的行为,但我无法理解为什么。
所以:我如何能够轻松,干净地获取istringstream
的剩余内容,为什么str
还没有这样做?
答案 0 :(得分:2)
为什么不是str呢?
因为这是此方法的documented行为:
通过调用rdbuf() - &gt; str()返回基础字符串的副本。
它总是返回整个底层字符串
如何轻松,干净地获取istringstream的剩余内容
只需将您的代码更改为:
std::cout << stream.rdbuf() << std::endl;
输出是:
Two
words
答案 1 :(得分:0)
为什么不做str呢?
我相信有些人会想要一种方式,而其他人会想要另一种方式。
如何轻松,干净地获取
的剩余内容istringstream
&gt;
这不是太难。使用:
std::cout << stream.str().substr(stream.tellg()) << std::endl;