小專案 簡單注釋轉換(C風格轉到C 風格)

2021-07-12 01:56:01 字數 4101 閱讀 1112

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中的內容轉換,我們就得將該檔案中的內容乙個乙...