刪除C語言程序中所有的注釋語句的實現代碼

y3c5 9年前發布 | 1K 次閱讀 C/C++

一種解法非常好:狀態機。在各種狀態之間跳轉,邏輯清晰,不易出錯,出錯了也容易調試。

下面把代碼貼出來:

    #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);  
    }  
}  </pre> 


 本文由用戶 y3c5 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!