gpt4 book ai didi

c++ - 添加额外字符时 stringstream 的 putback 失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:13:28 30 4
gpt4 key购买 nike

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

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;
}

Output: putback failed

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

最佳答案

关于putback存在误解代码中的方法:其目的不是将数据添加到流中,而是将一个已经提取的字符替换为另一个(您不添加任何内容,您替换旧字符有新东西)。通过阅读 sputbackc 的文档,这会更容易理解一点。由 putback 调用。

示例(来自 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').

关于c++ - 添加额外字符时 stringstream 的 putback 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37133295/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com