這只是簡單實現,將乙個正確**中的注釋進行轉換,如果**裡面有錯誤的話,可能會出現問題,比如出現了 /* 但是不出現 */ 如果這時候檔案結束了,這樣注釋轉換就會出錯,所以轉換前,應先保證注釋的正確性。
(以下情況均是在注釋正確的情況下進行)
話不多說,進入正題。
先分析一波:
我們讀取乙個.c檔案時,第乙個可能讀取到的字元可能有/
、正常**、和eof(檔案為空,直接為檔案尾)
首先,我們將這幾種情況用列舉型別羅列出來:
typedef enum
state
state;
我們可以將它們幾種狀態的轉換關係再畫出來:
黑色的字型為狀態之間轉換的條件。
接下來,我們用**來實現:
採用多檔案編譯的方式:
commentconvert.h
#ifndef __commentconvert_h__
#define __commentconvert_h__
#include
#include
typedef enum state
state;
void commentconvert(file *pread,file *pwrite); //注釋轉換
void do_nul_state(file *pread,file *pwrite, state *pstate); //無狀態執行操作
void do_c_state(file *pread,file *pwrite, state *pstate); //c注釋狀態執行操作 /*
void do_cpp_state(file *pread,file *pwrite, state *pstate); //c++狀態執行操作 //
#endif // !__commentconvert_h__
commentconvert.c#include"commentconvert.h"
void commentconvert(file *pread, file *pwrite)
}
}void do_nul_state(file *pread, file *pwrite, state *pstate)
break;
case
'/': //c++注釋開始
break;
default: //正常讀到**即 2/3 等情況
break; }}
break;
case eof: //檔案的結束
*pstate = end_state;
break;
default: //正常**
break;
}}void do_c_state(file *pread, file *pwrite, state *pstate) //c注釋的處理
else
//考慮到連續兩個c注釋的問題 比如 /* int a = 1; */ /* int b = 1;*/ 將它們放在兩行
*pstate = nul_state;
}break;
case
'*': // **/ ******/ 等問題
break;
default: //正常讀到**
break;}}
break;
case
'\n': //多行注釋
break;
default:
break;
}}void do_cpp_state(file *pread, file *pwrite, state *pstate)
break;
case eof: //檔案尾
*pstate = end_state;
break;
default: //正常讀到**
fputc(first, pwrite);
break;}}
test.c#include"commentconvert.h"
void test()
file *pwrite = fopen("output.c", "w");
if (pread == null)
commentconvert(pread, pwrite);
fclose(pread);
pread = null;
fclose(pwrite);
pwrite = null;
}int main()
測試** input.c
2/3
//**中只出現乙個/的情況
/*這是一段**
這段**只用作測試
注釋為新增的各種情況
*/int fib(int n)
return ret; //返回求得的第n個fib的值 /**/
}
測試結果:
我們也可以將前面的流更改為標準的輸入輸出流,這樣我們就可以在cmd視窗裡輸入並顯示輸出了,不過它的顯示是輸入一行輸出一行,所以看起來可能不是很容易,不過原理與前面**相同。
以上即為實現注釋轉換的全部內容,不足之處還望指正。
C語言實現簡單注釋轉換
我們常見的注釋轉換有兩種風格 c語言注釋風格和c 注釋風格。c語言注釋 注釋內容 特點 允許多行注釋,但不允許巢狀注釋 c 注釋 注釋內容 特點 允許巢狀注釋,但不允許多行注釋 這個程式的目的就是為了將c語言的注釋轉換成c 的注釋。我們給定乙個 input.c 程式執行後產生乙個對應的 output...
實現c語言注釋轉換為c 注釋
這篇文章將實現 c語言注釋轉換為c 注釋 例如,將下面的c語言注釋轉換為c 注釋 1.一般情況 int i 0 2.換行問題 int i 0 int j 0 int i 0 int j 0 3.匹配問題 int i 0 xx 4.多行注釋問題 int i 0 int j 0 int k 0 int ...
注釋轉換(C注釋轉換為c 注釋)
對於注釋轉換首先給出我的測試圖 由圖可以看出將左邊的c語言注釋轉換為右邊c 注釋就是注釋轉換 首先說明一下轉換思想方法 1.建立兩個檔案input.c和output.c,input.c裡面用來讀取c語言的注釋,output.c裡面儲存轉換成為c 的注釋,中間的轉換過程就是 完成,當然檔案名字和作用自...