添加额外的char时,stringstream的putback失败

时间:2016-05-10 08:39:55

标签: c++ stringstream istream

我有以下代码片段来修改字符串流,以便它将有额外的一个字符前面。但是,我无法得到预期的结果。

void modifyStream(std::istream& s1)
{
    if (s1.putback('Y'))
       std::cout << s1.rdbuf() << '\n';
    else
       std::cout << "putback failed\n";
}

int main(int argc, const char * argv[])
{

  const char* str = "Hello, world";
  std::stringstream s1(str); // IO stream
  modifyStream(s1);

  return 0;
}
  

输出:回退失败

但是,我期待着“YHello,世界”的输出。 有人可以帮忙解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您的代码中存在对putback方法的误解:其目的不是数据添加到流中,而是替换一个已经提取的字符与另一个(你不添加任何东西,你用一些新的东西替换旧的角色)。通过阅读由putback调用的sputbackc文档,可以理解这一点。

示例(来自encppreference):

std::stringstream s1("Hello, world"); // IO stream
s1.get();
if (s1.putback('Y')) // modifies the buffer
    std::cout << s1.rdbuf() << '\n';
else
    std::cout << "putback failed\n";

输出:

Yello, world

电话s1.putback('Y')将字符'Y'放回最后提取字符的位置(在本例中为'H')。