2010-03-06 53 views
3

当您在C++中使用ignore()时,是否有方法检查那些被忽略的值?我基本上正在阅读一些字符,并希望知道是否忽略了文本中的普通字符,或者如果我首先获得了换行符。谢谢。检查忽略值()值

回答

1

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

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

0

如果您提供的可选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()之间的区别哪一部分不明显?” ;-)

1

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