c語言小專案 注釋轉換

2021-07-12 01:00:22 字數 3964 閱讀 5688

這篇部落格,我將整理關於注釋轉換的知識,首先,得知道,注釋轉換包括,c語言注釋轉

換成c++注釋,和c++注釋轉換成c語言注釋。

c語言注釋的風格:/*這是c語言注釋*/

c++語言注釋風格://這是c++注釋風格

下面,我主要分析將所有的注釋轉換成c++注釋,即就是

c語言注釋轉

換成c++注釋。

這樣的轉換會存在以下多種情況:

1.一般情況:/* int i = 0;*/轉換後就是//int i = 0;

2.換行問題:

/* int i = 0; */int j = 0;

/* int i = 0; */

int j = 0;

3.匹配問題:

/*int i = 0;/****xx*/轉換後就是//int i = 0;/****xx

4.多行注釋問題:

/*int i=0;

int j = 0;

int k = 0;

*/int k = 0;    

轉換後就是:

//

//int i = 0;

//int j = 0;

//int k = 0;

//int k = 0;

5.連續注釋問題:

/**//**/

轉換後就是:// //

6.連續的**/問題:

/***/

轉換後就是://*

7.c++注釋問題:

// /**************/

轉換後還是// /**************/

8.字串裡的注釋:

"/*helloyaoyao*/"

轉換後還是:"/*helloyaoyao*/"

由於情況比較大,所以,我們運用乙個叫做有限狀態機的東西~~

我們主要的工作是將input.c裡的內容通過注釋轉換寫進output.c裡。

有限狀態機:

有限狀態機fsm是軟體上常用的一種處理⽅法,它把複雜的控制邏輯分解成有限個穩定

狀態,在每個狀態上進行處理。

有限狀態機是閉環系統,可以用有限的狀態,處理無窮

的事務。

關於c注釋到c++注釋的狀態轉換圖如下:

c狀態是不會到結束狀態的。

下邊來看原始碼(便於讀者理解,所以**中寫的注釋可能比較通俗易懂一點,也不是特

別專業):

#define _crt_secure_no_warnings 1

#include"commentconvert.h"

int main()

pfwrite = fopen(outputname, "w");

if (null == pfwrite)

commentcovert(pfread, pfwrite);

printf("注釋結束\n");

system("pause");

return 0;

}#ifndef __commentcovert_h__

#define __commentcovert_h__

#define inputname "input.c"

#define outputname "output.c"

#include#includeenum state

;void commentcovert(file *pfread, file *pfwrite);

void do_nul_state(file *pfread, file *pfwrite);

void do_c_state(file *pfread, file *pfwrite);

void do_cpp_state(file *pfread, file *pfwrite);

void do_str_state(file *pfread, file *pfwrite);

#endif//

#include"commentconvert.h"

enum state state = nul_state;

void commentcovert(file *pfread, file *pfwrite) }}

void do_nul_state(file *pfread, file *pfwrite)

else if (second == '*')

else

break;

case eof:

state = end_state;//如果遇到eof,進入結束狀態

break;

case '"':

fputc(first, pfwrite);

state = str_state;//如果遇到",進入字串狀態

break;

default:

fputc(first, pfwrite);//其他情況的字元,直接寫進去就行

break;

}}void do_str_state(file *pfread,file *pfwrite)

}void do_c_state(file *pfread, file *pfwrite)

else

}

else

break;

case '\n':

fputc(first, pfwrite);//如果需要回車,吧回車寫入,在寫入//,狀態不變。

fputc('/', pfwrite);

fputc('/', pfwrite);

break;

default:

fputc(first, pfwrite);

break; }}

void do_cpp_state(file *pfread, file *pfwrite)

else

break;

}}

加入**之後,竟然發現好醜~~~希望理解。

**的測試用例:

下邊我來談一下關於寫**時的一些失誤:

1.寫**之前,沒有將思路整理好,導致出錯了也不知道從哪開始除錯,排查。

2.對有限狀態轉移的不理解:比如c狀態下沒有遇到*/,遇到了其他一般字元,仍然需要

停留在c狀態;還有,狀態被改變之後,不用人為地呼叫commentconvert函式,因為進

入當前狀態是從commentconvert函式進入的,所以結束當前狀態後也會回到commentconvert函式,while迴圈幫我們實現了。也是因為多餘。。

3.state是乙個全域性變數,軟體工程課學到,盡量不要使用全域性變數,是因為它不安全,

想改就能改,根據他的這個特性,我們可以做到狀態轉換。但是,定義全域性變數,你也

不要得寸進尺----將全域性變數定義在標頭檔案中,這樣全域性變數在每個檔案中都可以被使

用,被改變,而我們只要在我們當前的檔案中使用。如果乙個工程不是乙個人完成,那

麼其他人的不留意也會改變它,所以,這樣就不好了。(反正意思就是這個了)

4.開啟檔案就關閉檔案,如果讀取開啟失敗,關閉檔案再報告錯誤;如果程式順利執行

之後,也要關閉檔案,粗心的我並沒有關閉,以下這兩句**:

fclose(pfread);

fclose(pfwrite);

應該新增在測試檔案的

commentconvert函式呼叫之後。

這是我在寫這個小專案過程中遇到的問題,希望讀者會注意~~當然,還有誰會像我這麼

笨,犯這樣的錯誤~~

C語言小專案 注釋轉換

這裡所說的注釋轉換是指將c風格的注釋轉換成c 風格的注釋。那麼我們如何來實現這個目的呢?首先我們得有乙個名為 input.c 的檔案 裡面寫著一段c風格的注釋和一些 而我們轉換後的注釋及 應該儲存在乙個名為 output.c 的檔案裡。要將 input.c中的內容轉換,我們就得將該檔案中的內容乙個乙...

小專案 注釋轉換

功能 將c注釋轉換為c 注釋 有普通 c cpp 結束四種狀態,各狀態轉換條件如下 status 定義列舉型別,表示四種狀態 include include convert.h enum sta status nulstat 將 狀態預製為普通狀態 void test nulstat file ip...

注釋轉換小專案(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...