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

C++: How can I look at the next character of a file I'm reading in to compare the characters?

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

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

1) 正常:这是您开始时的状态。如果您阅读/,您将进入状态2。否则,对你读到的字符进行处理,一直停留在这个状态。

2) Read one /:在这个状态下,如果你读到一个/,你就进入状态3。否则,处理一个/,处理刚刚读到的字符,然后进入状态1.

3) 读取两个'/`':在这种状态下,您将忽略所读取的内容,除非它是换行符。如果是换行符,则转到状态 1。(您可能需要也可能不需要处理换行符,具体取决于您的应用程序的详细信息。)

嗯,从技术上讲,由于您此时根本没有对角色进行任何操作,因此您将忽略所有内容,包括 //

之后的内容

但考虑使用状态变量,例如具有值 { OK, COMMENTTRIGGER, COMMENTACTIVE} 的枚举 平时处于OK状态。

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

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

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

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

处于 COMMENTACTIVE 状态时忽略内容

如果您不想使用状态机,我注意到 ifstream class 有一个 peek() 方法,您可以使用它来预测一个字符而无需获取 then放回去