C 删除C语言程序中的所有注释
题目:
编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。在C语言中,注释不允许嵌套。
还是看答案吧,毕竟是导言,我并不指望自己能写出来,代码还是勉强能看懂的,就是处理引号部分还不大明白(如为什么echo_quote
里搜索\\
),留待以后回头再看看这个问题。
另外这个程序一个问题就是分段落输出,这样比较无力……不晓得是不是我码错了什么……换言之,确实它值得改进的地方还有很多,注释也自己乱加了点OTZ。
#include <stdio.h>
void rcomment(int c);
void in_comment(void);
void echo_quote(int c);
/* 移除所有注释 */
main(void)
{
int c, d;
while ((c = getchar()) != EOF)
rcomment(c);
return 0;
}
/* 阅读每个字节,移除注释 */
void rcomment(int c)
{
int d;
if (c == '/')
if ((d = getchar()) == '*')
in_comment(); /* 开始注释 */
else if (d == '/') {
putchar(c); /* 另一个斜杠 */
rcomment(d);
} else {
putchar(c); /* 不是注释 */
putchar(d);
}
else if (c == '\'' || c == '"') /* 引号中的内容原样输出 */
echo_quote(c); /* 引用开始 */
else
putchar(c); /* 不是注释 */
}
/* in_comment函数:在一个有效的注释内 */
void in_comment(void)
{
int c, d;
c = getchar(); /* 上一个字节 */
d = getchar(); /* 所在的字节 */
while (c != '*' || d != '/') { /* 搜索结束标志 */
c = d;
d = getchar();
}
}
/* echo_quote函数:每个函数内的字符 */
void echo_quote(int c)
{
int d;
putchar(c);
while ((d = getchar()) != c) { /* 搜索结束标志 */
putchar(d);
if (d == '\\')
putchar(getchar());
}
putchar(d);
}
明明按照官方的说法这货要碰到EOF
在输出啊OTZ
植入部分
如果您觉得文章不错,可以通过赞助支持我。
如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。