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

植入部分

如果您觉得文章不错,可以通过赞助支持我。

如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。

标签: 成品, 源码, 题目, 存疑

添加新评论