C ++:如何查看我正在阅读的文件的下一个字符来比较字符?

时间:2016-03-11 16:29:55

标签: c++ ifstream

我必须一次从一个文件读取一个字符(不能用字符串读取它!)如果我找到//那么我必须忽略所有内容,直到我到达行尾。

3 个答案:

答案 0 :(得分:5)

使用状态机。你有三种状态:

1)正常:这是您开始的状态。如果您阅读/,则进入状态2。否则,处理您阅读的字符并保持此状态。

2)读取一个/ :在此状态下,如果您阅读了/,则会进入状态3.否则,处理/,进程你刚刚阅读的角色,然后进入状态1.

3)阅读两个' /`' s :在这种状态下,除非是新行,否则你会忽略你所读到的内容。如果它是换行符,则转到状态1.(根据应用程序的详细信息,您可能需要也可能不需要处理换行符。)

答案 1 :(得分:1)

如果你不想使用状态机,我注意到ifstream类有一个peek()方法,你可以使用它来预测一个字符而不需要再放回去

答案 2 :(得分:0)

嗯,从技术上来说,既然你现在根本没有对角色做任何事情,你就忽略了一切,包括//之后的东西

但考虑使用状态变量,例如值为{ OK, COMMENTTRIGGER, COMMENTACTIVE}的枚举 通常处于状态OK。

在第一个/(即((state==OK && (c=='/')) )上,将状态更改为COMMENTTRIGGER

第二个/上的

(即((state==COMMENTTRIGGER)&&(c=='/') ),将状态更改为COMMENTACTIVE。

如果您处于COMMENTTRIGGER状态,并且您没有获得第二个/,请恢复为OK状态,并在处理新角色之前处理之前的/。因为它是单数/

当你到达换行符时,将状态设置回OK,因为你想再处理一下

处于状态COMMENTACTIVE

时忽略内容