多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > 刪除C語言程序中所有的注釋語句,代碼實現(xiàn)

刪除C語言程序中所有的注釋語句,代碼實現(xiàn)

來源:程序員人生   發(fā)布時間:2015-01-19 09:05:54 閱讀次數(shù):2588次

原文鏈接:http://lixing123.com/archives/310

學(xué)習(xí)《C程序設(shè)計語言》到第1章最后,有1道題目:

編寫1個刪除C語言程序中所有的注釋語句。要正確處理帶引號的字符串與字符常量。在C語言中,注釋不允許嵌套。 Exercise 1⑵3. Write a program to remove all comments from a C program. Don't forget to handle quoted strings and character constants properly. C comments don't nest.
剛開始,我用1種brute-force的方式,對每一個字符進(jìn)行遍歷,然落后行判斷,有無進(jìn)入注釋。

這樣做有1個非常麻煩的問題:只有連續(xù)檢測到“//”或"/*"時,才肯定進(jìn)入了注釋狀態(tài);如果我們只檢測到1個"/",后面就是其它字符串的話,還得將這個單獨的"/"打印出來。

而且有許多的分支狀態(tài),如果用if/else的話,會難以理解,并容易出錯。

在網(wǎng)上搜了1下,發(fā)現(xiàn)有1種解法非常好:狀態(tài)機(jī)。在各種狀態(tài)之間跳轉(zhuǎn),邏輯清晰,不容易出錯,出錯了也容易調(diào)試。

下面把代碼貼出來:

#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*/"); } } /*狀態(tài)機(jī)函數(shù)*/ void change_state(int c){ if (state==0) {//普通狀態(tài) 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) {// "//"注釋狀態(tài) if (c==' ') { state = 0; putchar(c); }else{ state = 2; } }else if (state==3) {// "/*"注釋狀態(tài) 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); } }

以本段代碼作為輸入,結(jié)果以下:

#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 ( (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) { if (c=='/') { state = 2; }else if (c=='*'){ state = 3; }else{ state = 0; putchar(c1); putchar(c); } }else if (state==2) { if (c==' ') { 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); }
perfect!

感謝@roma823 及其文章:http://blog.csdn.net/roma823/article/details/6364849

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 97影院午夜在线观看琪琪 | 亚洲国产欧美在线人网站 | 国产成人久久久精品一区二区三区 | 中文字幕第一 | 欧美精品一区二区三区四区 | 波多野结衣 在线资源观看 波多野结衣 一区二区 | 精品91 | 男女爽爽无遮挡午夜视频在线观看 | 超乳w真性中出し冲田杏梨101 | 秋霞理论最新三级理论最 | 91精品国产福利在线观看性色 | 最近中文字幕免费2019 | 日本高清2019免费视频 | 亚洲免费影视 | 国产精品ⅴ视频免费观看 | 亚洲韩国日本欧美一区二区三区 | 在线观看www| 日本成年一区久久综合 | 老司机福利在线播放 | 99久久精品国产一区二区成人 | 手机在线看片国产日韩生活片 | 欧美一级淫片aaaaaaa视频 | 91久久偷偷做嫩草影院 | 久久精品一区二区三区资源网 | 国产一区二区三区高清 | jizz免费 | 精品无人乱码一区二区三区 | 久久93精品国产91久久综合 | 爱爱www在线观看视频高清 | 最近高清中文在线字幕在线观看 | 最新国产在线观看福利91 | 亚洲精品国产第一区二区三区 | 91亚洲区国产区精品区 | 欧美日本一区亚洲欧美一区 | 日本wwxx护士 | 最近无中文字幕视频 | 91视频啪啪 | 国产精品va在线观看手机版 | 亚洲欧美日韩国产色另类 | 激情视频网| 在线观看视频高清视频 |