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放回去
我必须一次从文件中读取一个字符(不能使用字符串读取它!),如果我找到 //
那么我必须忽略所有内容,直到我到达结尾线。
使用状态机。你有三种状态:
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放回去