我有以下代码片段来修改字符串流,以便它将有额外的一个字符前面。但是,我无法得到预期的结果。
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,世界”的输出。 有人可以帮忙解决这个问题吗?
答案 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'
)。