前段时间写了一个删除c/c++源程序中的注释的程序,结构比较复杂,现在考虑用有限状态机来解决。代码没有考虑字符串、嵌套下的情况,若要考虑,还需进行少许修改。代码如下 #include <stdio.h> enum { CODE, COMMENT1, //“/**/”型注释 COMMENT2, //“//”型注释 }g_state=CODE; enum Input{ CH, //其他字符 CH1, // "/*" or "*/" CH2, // "//" RT, // "/n" }; Input alter(char ch, FILE *file) { char temp; if(ch=='/') { temp = fgetc(file); if(temp=='/') return CH2; else if(temp=='*') return CH1; else { fseek(file, -1, 1); return CH; } } else if(ch=='*') { temp = fgetc(file); if(temp=='/') return CH1; else { fseek(file, -1, 1); return CH; } } else if(ch=='/n') return RT; else return CH; } int main() { FILE *infile = fopen("infile.cpp", "r");