c++ - 带有转义字符的 cin.get

标签 c++ cin

我有使用 cin.get( input, c ) 的代码,其中 c 是分隔符。它在极少数情况下会失败,因为还有另一个字符 e 用作转义字符。所以,如果 c 跟在 e 之后,我希望 cin.get 转到下一个 c,而不是转义的 c.

我目前正在检查 cin.get 的最后一个字符是否为 e,如果是,则追加另一个 cin.get。有没有办法向 cin.get 添加转义字符,这样我就不需要对转义字符进行额外检查?

最佳答案

如果您想要这样的行为,您需要自己实现。它没有内置到 cin.get 中。

至少在理论上,iostreams 库确实提供了一个可以合理插入此类逻辑的位置,因此它可以作为流的一部分。具体来说,iostream 有一个关联的 locale,并使用该区域的 codecvt facet 将文件中字符的外部表示转换为字符的内部表示,因为它们将被你的程序看到。您可以在自定义 codecvt facet 中执行此转换。

虽然这有一个相当严重的问题——编写一个 codecvt facet 是相当痛苦的。尝试将此转换编写为 codecvt facet,而不是在阅读后完成这项工作,这大约会使代码量增加一倍,并且至少使所涉及的难度增加三倍。

这项投资可以得到返回——将转换打包到codecvt facet 中可以更容易地集成到多个程序中。如果您真的希望在许多程序中使用这种特定的转换,将它打包到一个方面可能是有意义的。如果(正如我猜测的那样)您不太可能在其他程序中使用它,那么可能不值得为此付出努力。

关于c++ - 带有转义字符的 cin.get,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16672381/

相关文章:

c++ - 使用 cin.ignore() 跳过 2 个空格

c++ - 使用 std::cin 忽略/跳过标记

c++ - 在哪里可以找到当前的 C 或 C++ 标准文档?

c++ - 如何用空格读取 cin 直到换行符?

c++ - 我可以出于调试目的查看 cin 缓冲区吗?

c++ - 冒泡排序 - 结构数组与结构数组

c++ - 连续使用 while(cin >> input) 成功

C++ - GetLength() 方法获取数组的长度

c++ - 我可以抛出 `std::bad_cast` 吗?

c++ - Armadillo 与 Boost Odeint : Odeint resizes the state vector to zero during integration 冲突