我必须一次从一个文件读取一个字符(不能用字符串读取它!)如果我找到//
那么我必须忽略所有内容,直到我到达行尾。
答案 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
时忽略内容