- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有以下代码片段来修改字符串流,使其前面有一个额外的字符。但是,我无法得到预期的结果。
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/
我只是有点困惑:成员函数 putback() 将读取的最后一个字符放回到输入流中。这到底是什么意思?我尝试对其进行试验,发现无论是否使用 putback(),文件的结果都没有差异。 *我有两个文本文件
问题来自https://en.cppreference.com/w/cpp/io/basic_istream/putback , 示例代码。 #include #include int main(
许多站点都描述了 istream::putback() 函数,它可以让您将一个字符“放回”输入流中,以便您可以在后续的读取操作中再次读取它。 然而,是什么阻止我在同一个流上按顺序多次调用 putbac
我正在使用标准 iostream 从文件中获取一些输入,我对 unget() 与 putback(character) 感到困惑。在我看来,这些函数实际上是相同的,其中 unget() 只记得输入的字
我的用例: 遍历字符串 对词法分析器状态机中的每个字符使用react 看到一些字符,意识到前一个字符是其 token 的结尾 完成 token 转换回Empty状态(意味着没有 token 是部分构造
我有以下代码片段来修改字符串流,使其前面有一个额外的字符。但是,我无法得到预期的结果。 void modifyStream(std::istream& s1) { if (s1.putback
直觉上,从 C++ 规范来看,在我看来,istream::putback( c ) 应该始终安排输入缓冲区,以便下一次调用 istream::peek () 应读取字符 c。这不对吗?我问是因为 Xc
我需要尝试从 std::istream(可能是 std::cin)中查看多个字符,所以我写了一个简单的循环来调用 get() 很多次,然后 putback() 很多次: std::vector pee
我的程序中有线程,我想将字符放入流中并在另一个线程中读取它,但是在 std::cin.putback() 之后我需要从键盘写一些东西来“唤醒”std::cin在主要功能中。我可以做一些自动阅读的事情吗
我是编程新手,正在查看这段代码,试图了解它是如何工作的。我的理解是,程序在每次运行 while 循环的开始等待输入,如果允许该输入,则循环运行。那是对的吗?如果是,程序怎么会在 '!' 的情况下打印出
我是一名优秀的程序员,十分优秀!