【问题标题】:Checking ignore() for values检查 ignore() 的值
【发布时间】:2010-03-06 00:34:08
【问题描述】:

当你在 C++ 中使用 ignore() 时,有没有办法检查那些被忽略的值?我基本上正在阅读一些字符,想知道我是否忽略了文本中的普通字符,或者我是否先得到了换行符。谢谢。

【问题讨论】:

    标签: c++ stream


    【解决方案1】:

    我不这么认为——你必须“自己动手”。

    换句话说,我认为您必须编写一些使用get() 从流中读取的代码,然后添加一些逻辑来保留您需要的内容并忽略其余部分(同时检查您的内容忽略)。

    【讨论】:

      【解决方案2】:

      如果您实际上不想忽略字符,请不要使用ignore() 提取它们。 get() 可以做同样的工作,但也可以存储提取的字符,以便您以后检查它们。

      【讨论】:

        【解决方案3】:

        如果您将可选的delim 参数提供给ignore(),那么它可以在换行处停止:

        streampos old = is.tellg();
        is.ignore(num, '\n');
        if (is.tellg() != old + num) {
            // didn't ignore "num" characters, if not eof or error then we
            // must have reached a newline character.
        }
        

        不过有一个障碍——当ignore() 碰到分隔符时,它也会忽略它。因此,如果您恰好在忽略字符集的末尾点击分隔符,则tellg() 将返回old + num。 AFAIK 无法判断最后一个忽略的字符是否是分隔符。也无法指定不是单个字符的分隔符。

        我也不知道这是否以及何时可能比仅读取 num 字节并搜索换行符更快。我最初的想法是,“ignore()read() 之间的哪一部分区别是不明显的?” ;-)

        【讨论】:

          猜你喜欢
          • 2015-01-04
          • 2014-07-04
          • 1970-01-01
          • 1970-01-01
          • 2010-09-29
          • 2017-11-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多