题目
编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。在C语言中,注释不允许嵌套。
题目分析
注释分两种情况,一种是/……/中的文本,另外一种是“//”后面的一行。
编程思路
1.判断当前行是否有“/”或“//”出现。如果“/”或者“//”之前有双引号或单引号,则不做处理。
2.输出不带注释的语句。
代码实现(这个代码写的非常绕,我都不好意思说了)
int main()
{
int i, j;
char c;
char line[CHARMAX];
i = 0;
for (i = 0; (((c = getchar()) != EOF) && i < CHARMAX); i++)
line[i] = c;
j = i;
i = 0;
while (i < j )
{
c = line[i];
if ( c == '/')
{
i++;
c = line[i];
if ( c == '/')
{
while ( c != '\n')
{
i++;
c = line[i];
}
}
else if ( c == '*')
{
i++;
c = line[i];
while ( c != '\n')
{
if ( c == '*')
{
i++;
c = line[i];
if ( c == '/')
{
i++;
c = line[i];
}
else
{
c = line[i];
}
}
else
{
i++;
c = line[i];
}
}
}
else
{
c = line[i];
i++;
}
}
else
{
putchar(c);
i++;
}
}
return 0;
}
执行结果
输入: lint spacenum; /*abcdefg*/ k int tabnumfinal; /* abcdefg */ j// int spacenumfinal; iint tabnumfinal; /* abcdefg */ hint spacenum; /*abcdefg*/ gint tabnumfinal; /* abcdefg */ f// int spacenumfinal; eint tabnumfinal; /* abcdefg */ dint spacenum; /*abcdefg*/ cint tabnumfinal; /* abcdefg */ b// int spacenumfinal; aint tabnumfinal; /* abcdefg */ 输出: lint spacenum; k int tabnumfinal; j iint tabnumfinal; hint spacenum; gint tabnumfinal; f eint tabnumfinal; dint spacenum; cint tabnumfinal; b aint tabnumfinal;