#include
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");
FILE *outfile = fopen("outfile.cpp", "w");
Input input;
if(infile==NULL)
{
printf("cannot open infile!");
return -1;
}
char ch;
ch = fgetc(infile);
while(ch!=EOF)
{
input = alter(ch, infile);
switch(g_state)
{
case CODE:
if(input==CH || input==RT) fputc(ch, outfile);
else if(input==CH1) g_state = COMMENT1;
else if(input==CH2) g_state = COMMENT2;
else ;
break;
case COMMENT1:
if(input==CH1) g_state = CODE;
break;
case COMMENT2:
if(input==RT)
{
fputc('/n', outfile);
g_state = CODE;
break;
}
}
ch = fgetc(infile);
}
printf("complete!");
getchar();
fclose(infile);
fclose(outfile);
return 0;
}