删除C语言程序中所有的注释语句的实现代码

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用
一种解法非常好:状态机。在各种状态之间跳转,逻辑清晰,不易出错,出错了也容易调试。

下面把代码贴出来:

    #include <stdio.h>  
      
    int state;  
      
    int c1,c2;  
      
    void change_state(int c);  
      
    int main(int argc, const char * argv[]) {  
        int c;  
        state = 0;  
        c1 = 0;  
        c2 = 0;  
        while ((c=getchar())!=EOF) {  
            c1 = c2;  
            c2 = c;  
            change_state(c);  
        }  
        if (/* DISABLES CODE */ (0)==1) {  
            printf("just test://abcd");  
            printf("just test:/*hello*/");  
        }  
    }  
      
    /*状态机函数*/  
    void change_state(int c){  
        if (state==0) {//普通状态  
            if (c=='/') {  
                state = 1;  
            }else if (c=='"'){  
                state = 5;  
                putchar(c);  
            }else if (c=='\''){  
                state = 6;  
                putchar(c);  
            }  
            else{  
                state = 0;  
                putchar(c);  
            }  
        }else if (state==1) {//检测到1个'/'  
            if (c=='/') {  
                state = 2;  
            }else if (c=='*'){  
                state = 3;  
            }else{  
                state = 0;  
                putchar(c1);  
                putchar(c);  
            }  
        }else if (state==2) {// "//"注释状态  
            if (c=='\n') {  
                state = 0;  
                putchar(c);  
            }else{  
                state = 2;  
            }  
        }else if (state==3) {// "/*"注释状态  
            if (c=='*') {  
                state = 4;  
            }else{  
                state = 3;  
            }  
        }else if (state==4) {  
            if (c=='/') {  
                state = 0;  
            }else{  
                state = 3;  
            }  
        }else if (state==5){//在"字符串里  
            if (c=='"') {  
                state = 0;  
                putchar(c);  
            }else if(c=='\\'){  
                state = 7;  
                putchar(c);  
            }else{  
                state = 5;  
                putchar(c);  
            }  
        }else if (state==6){//在'字符里  
            if (c=='\'') {  
                state = 0;  
                putchar(c);  
            }else if(c=='\\'){  
                state = 8;  
                putchar(c);  
            }else{  
                state = 6;  
                putchar(c);  
            }  
        }else if (state==7){//在"字符串里的"\"  
            state = 5;  
            putchar(c);  
        }else if (state==8){//在'字符串里的"\"  
            state = 6;  
            putchar(c);  
        }  
    }  

标签: 代码

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:使用python3.4解析xml文件(sax、dom、etree)

下一篇:php发送邮件函数,支持html和普通文本