我有使用 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/