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