C 删除C语言程序中的所有注释
题目: 编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。在C语言中,注释不允许嵌套。
还是看答案吧,毕竟是导言,我并不指望自己能写出来,代码还是勉强能看懂的,就是处理引号部分还不大明白(如为什么echo_quote
里搜索\\
),留待以后回头再看看这个问题。
另外这个程序一个问题就是分段落输出,这样比较无力……不晓得是不是我码错了什么……换言之,确实它值得改进的地方还有很多,注释也自己乱加了点OTZ。
1#include <stdio.h>
2
3void rcomment(int c);
4void in_comment(void);
5void echo_quote(int c);
6
7/* 移除所有注释 */
8main(void)
9{
10 int c, d;
11
12 while ((c = getchar()) != EOF)
13 rcomment(c);
14 return 0;
15}
16
17/* 阅读每个字节,移除注释 */
18void rcomment(int c)
19{
20 int d;
21
22 if (c == '/')
23 if ((d = getchar()) == '*')
24 in_comment(); /* 开始注释 */
25 else if (d == '/') {
26 putchar(c); /* 另一个斜杠 */
27 rcomment(d);
28 } else {
29 putchar(c); /* 不是注释 */
30 putchar(d);
31 }
32 else if (c == '\'' || c == '"') /* 引号中的内容原样输出 */
33 echo_quote(c); /* 引用开始 */
34 else
35 putchar(c); /* 不是注释 */
36}
37
38/* in_comment函数:在一个有效的注释内 */
39void in_comment(void)
40{
41 int c, d;
42 c = getchar(); /* 上一个字节 */
43 d = getchar(); /* 所在的字节 */
44 while (c != '*' || d != '/') { /* 搜索结束标志 */
45 c = d;
46 d = getchar();
47 }
48}
49
50/* echo_quote函数:每个函数内的字符 */
51void echo_quote(int c)
52{
53 int d;
54
55 putchar(c);
56 while ((d = getchar()) != c) { /* 搜索结束标志 */
57 putchar(d);
58 if (d == '\\')
59 putchar(getchar());
60 }
61 putchar(d);
62}
63
明明按照官方的说法这货要碰到EOF
在输出啊OTZ
评论 (0)