c的注釋是以字元 /* 開始,以字元 */ 結束,注釋被包含的內容。c++的注釋是以字元 // 開始,碰到換行符 \n 時結束,注釋一行。所以,從c注釋轉到c++,就是在碰到 /* 時將換成 // ,碰到 */ 時 將其刪除。當然,這裡會有許多種需要細心情況,我們下面再談。
完成這個專案,我們需要把**劃分4個狀態,null(無狀態),c狀態,cpp狀態,end狀態。沒有接觸過這個專案的同學對這四個狀態可能不太懂,請耐心往下看。
請閱讀下面的狀態轉換圖,首先,我們預設**開始時是null 狀態。
①當在null狀態下碰到 /* 時 進入 c狀態(同時將 /* 改為 //);
②在c狀態下碰到*/,說明c注釋已經結束,此時轉回到null狀態(將*/ 刪除),進行下一輪新的判斷;
③在null狀態下碰到 // 時,說明c++注釋開始,轉到cpp狀態;
④當在cpp狀態下讀到 \n 時,說明c++注釋結束,此時轉回null狀態,進行下一輪判斷;
⑤⑥⑦:當**讀到eof時,說明**已經結束,這時轉到end狀態,結束程式;
上面狀態轉換圖以及序號講解只說明了狀態之間的轉換關係,下面我們列舉一下將會碰到哪些情況:
// 1.一般情況
/* int i = 0; */
// 2.換行問題
/* int i = 0; */int j = 0;
/* int i = 0; */
int j = 0;
我們需要將 int j = 0; 換到下一行,保證有效內容不被注釋。
// 3.匹配問題
/*int i = 0;/****xx*/
/* 該與那個*/匹配?
// 4.多行注釋問題
/*int i=0;
int j = 0;
int k = 0;
*/int k = 0;
如何將每行都轉換成c++注釋?
// 5.連續注釋問題
/**//**/
連續的c注釋怎麼處理?
// 6.連續的**/問題
/****/
連續的***/又該怎麼處理?
// 7.c++注釋問題
// /**************/
c++注釋中遇到c注釋該怎麼辦?
這個小專案中我只處理了這幾種問題,當然還有許多情況需要同學們去發掘。例如:當乙個雙引號中包含 /**/ 或者 // 又改怎麼解決?
既然我們這個專案是對**進行操作,那麼我們的輸入輸出必須是函式啦。在相同的目錄下建立乙個 input.c 作為輸入。函式執行完畢後,自動生成輸出.c檔案。
在這裡,我宣告一下,下面的**中用到了fputc函式,fgetc函式,流等c語言知識點。不懂得同學自行查閱資料。
接下來我們來看**。我用的編譯軟體是vs2010,寫這個專案的時候將其分成了三部分。如圖:
commentconvert.h 是標頭檔案,裡面包含了所需的一些巨集,列舉型別和操作函式的介面。
#ifndef __comment_convert_h__ //防止標頭檔案重定義錯誤出現
#define __comment_convert_h__
#include#include#define inputfilename "input.c"//將檔名定義成巨集,方便以後的修改
#define outputfilename "output.c"
enum state//列舉型別
;void commentconvert(file *pread,file *pwrite);//總操作函式
void do_nul_state(file *pread,file *pwrite);//null狀態操作函式
void do_c_state(file *pread,file *pwrite);//c狀態操作函式
void do_cpp_state(file *pread,file *pwrite);//cpp狀態操作函式
#endif // __comment_convert_h__
commentconvert.c中放的是操作函式的**,與主函式分開是為了便於除錯。
#include"commentconvert.h"
enum state state=nul_state;
void do_nul_state(file *pread,file *pwrite)
else if(second=='/') //null狀態下 讀到 /* 轉換到 c++狀態
else
break;
case eof: //null狀態下 讀到 eof 轉換到 end狀態
fputc(first,pwrite);
state = end_state;
break;
default:
fputc(first,pwrite);
break;
}}void do_c_state(file *pread,file *pwrite)
else //如果不是,我們則新增乙個換行符
} else // 多個**/問題 如果 * 的下乙個字元不是 / ,則將這個字元返還給pread
break;
case '\n': //多行注釋問題 c狀態下讀到\n 放回\n 讀到下一行開頭 並放入 //
fputc(first,pwrite);
fputc('/',pwrite);
fputc('/',pwrite);
break;
case eof: // c狀態下讀到eof 換到end 狀態
fputc(first,pwrite);
state = end_state;
break;
default:
fputc(first,pwrite);
break;
}}void do_cpp_state(file *pread,file *pwrite)
else
break;
case eof: //c++狀態下遇到 eof 轉換到end
fputc(first,pwrite);
state = end_state;
break;
case '\n': //c++狀態下遇到 \n ,轉換到null狀態
state = nul_state;
default:
fputc(first,pwrite);
break; }}
void commentconvert(file *pread,file *pwrite)
}}
test.c中放的是除錯**,包括主函式。
#include"commentconvert.h"
int main()
pwrite=fopen(outputfilename,"w");
if(null==pwrite)
commentconvert(pread,pwrite);
printf("轉換結束");
fclose(pread); //用完之後,要關閉它。(良好程式設計習慣)
fclose(pwrite);
return 0;
}
如果你的**成功的話,將上面列舉的問題輸入 input.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 x 4.多行注釋 int i 0 i...
c語言小專案 注釋轉換
這篇部落格,我將整理關於注釋轉換的知識,首先,得知道,注釋轉換包括,c語言注釋轉 換成c 注釋,和c 注釋轉換成c語言注釋。c語言注釋的風格 這是c語言注釋 c 語言注釋風格 這是c 注釋風格 下面,我主要分析將所有的注釋轉換成c 注釋,即就是 c語言注釋轉 換成c 注釋。這樣的轉換會存在以下多種情...
C語言小專案 注釋轉換
這裡所說的注釋轉換是指將c風格的注釋轉換成c 風格的注釋。那麼我們如何來實現這個目的呢?首先我們得有乙個名為 input.c 的檔案 裡面寫著一段c風格的注釋和一些 而我們轉換後的注釋及 應該儲存在乙個名為 output.c 的檔案裡。要將 input.c中的內容轉換,我們就得將該檔案中的內容乙個乙...