【问题标题】:cin.get with escape charactercin.get 带转义字符
【发布时间】:2013-05-21 22:34:13
【问题描述】:

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

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

【问题讨论】:

  • 您的意思是要读取一个字符,如果是反斜杠,则读取另一个字符并将这两个字符转换为 C++ 字符转义码?如果是这种情况,那么不,你不能那样做。至少没有一个get 电话,你需要两个。

标签: c++ cin


【解决方案1】:

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

至少在理论上,iostreams 库确实提供了一个可以合理地插入这种逻辑的地方,因此它就像流的一部分一样。具体来说,iostream 具有关联的locale,并使用语言环境的codecvt facet 将文件中字符的外部表示转换为您的程序将看到的字符的内部表示。您可以在自定义codecvt facet 中进行此转换。

这有一个相当严重的问题——写一个codecvt facet 是相当痛苦的。尝试将这种转换写成 codecvt 方面,而不是在阅读后进行工作,就像是代码量大致翻了一番,所涉及的难度至少增加了三倍。

这种投资可以得到回报——将转换打包到codecvt 方面可以更容易地集成到多个程序中。如果您真的希望在许多程序中使用这种特定的转换,将其打包成一个方面可能是有意义的。如果(我猜这里就是这种情况)您不太可能在其他程序中使用它,那么可能不值得麻烦。

【讨论】:

    猜你喜欢
    • 2020-09-09
    • 2013-02-21
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多