istringstream :: str()不返回当前内容

时间:2017-03-30 17:35:53

标签: c++ stringstream

我有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还没有这样做?

2 个答案:

答案 0 :(得分:2)

  

为什么不是str呢?

因为这是此方法的documented行为:

  

通过调用rdbuf() - &gt; str()返回基础字符串的副本。

它总是返回整个底层字符串

  

如何轻松,干净地获取istringstream的剩余内容

只需将您的代码更改为:

std::cout << stream.rdbuf() << std::endl;

live example

输出是:

Two
 words

答案 1 :(得分:0)

  

为什么不做str呢?

我相信有些人会想要一种方式,而其他人会想要另一种方式。

  

如何轻松,干净地获取istringstream&gt;

的剩余内容

这不是太难。使用:

std::cout << stream.str().substr(stream.tellg()) << std::endl;