程式新思路:
注釋轉換一開始去想的時候,會覺得很複雜。因為在乙個原始檔裡出現注釋的情況雖然不會太多,但是可能會出現各種各樣,形形色色的注釋,在轉換程度上去想的時候會覺得很複雜,不同的問題都要有不同的解決方法的。
在這裡簡單的羅列注釋轉換可能出現的幾種情況:
// 1.一般情況
int num = 0;
/* 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 k = 0;
// 5.連續注釋問題
/**//**/
// 6.連續的**/問題
/***/
// 7.c++注釋問題
// /**************/
在注釋轉換的時候肯定不僅僅只有這些問題,可能有些也沒有想到位。所以我們會發現要處理的情況會很多,如果乙個乙個問題挨個解決的話,**就會有複雜性。我們可以這樣去給乙個思路:
圖中:注釋轉換過程使用了有限狀態機,可以給我們提供乙個新的思路。把注釋轉換切換到4中狀態中,根據有限的條件進入相應的狀態下去處理,並在根據條件進入下乙個狀態,依次迴圈,直到遇到eof結束。
有限狀態機(finite state machine)是乙個數學概念,如果把它運用於程式中,可以發揮很大的作用。它是一種協議,用於有限數量的子程式(「狀態」)的發展變化。每個子程式進行一些處理並選擇下一種狀態(通常取決於下一段輸入)。有限狀態機(fsm)可以用作程式的控制結構。
程式**:
標頭檔案annotationconversion.h
#ifndef __annotationconversion_h__
#include
#include
#define chmod "input.c"
#define final "output.c"
typedef enum
state
//列舉定義四種狀態
state;
void execute(file* pfin, file* pfout);//轉換函式
void donullconvert(file* pfin, file* pfout,state *state);//普通狀態
void docconvert(file* pfin, file* pfout,state *state);//c狀態函式
void docppconvert(file* pfin, file* pfout,state *state);//c++狀態函式
#endif//__annotationconversion_h__
實現部分annotationconversion.c
#include "annotationconversion.h"
void execute(file* pfin, file* pfout)//轉換函式
}}void donullconvert(file* pfin, file* pfout, state *state)//普通狀態操作函式
break;
case
'*':
//遇到/*依然輸出//並進入c注釋狀態
break;
default://正常語句:(例如/hehe/),直接寫進檔案。
break;}}
break;
case eof:
//結束標誌
break;
default:
//正常語句
break;
}}void docconvert(file* pfin, file* pfout, state *state)//c注釋狀態操作函式
else
}break;
default:
//針對/***/情況
fputc(first, pfout);
ungetc(second, pfin);
break;}}
break;
case
'\n':
//針對多行c語言注釋問題
break;
default:
fputc(first, pfout);
break;
}}void docppconvert(file* pfin, file* pfout, state *state)//c++注釋轉換操作函式
break;
case eof:
*state = eof_state;
break;
default:
fputc(first, pfout);
break;}}
測試部分test.c針對fopen、fread、fwrite三個函式在我之前寫的檔案流通訊錄中有詳細解釋
#include "annotationconversion.h"
#pragma warning (disable:4996)
int main()
file* pfwrite = fopen(final, "w");
if (pfwrite == null)
execute(pfread, pfwrite);
printf("轉換成功\n");
fclose(pfread);
fclose(pfwrite);
system("pause");
return
0;}
針對前面一開始提出的問題,程式執行注釋轉換後結果為:
小專案 注釋轉換
功能 將c注釋轉換為c 注釋 有普通 c cpp 結束四種狀態,各狀態轉換條件如下 status 定義列舉型別,表示四種狀態 include include convert.h enum sta status nulstat 將 狀態預製為普通狀態 void test nulstat file ip...
c語言小專案 注釋轉換
這篇部落格,我將整理關於注釋轉換的知識,首先,得知道,注釋轉換包括,c語言注釋轉 換成c 注釋,和c 注釋轉換成c語言注釋。c語言注釋的風格 這是c語言注釋 c 語言注釋風格 這是c 注釋風格 下面,我主要分析將所有的注釋轉換成c 注釋,即就是 c語言注釋轉 換成c 注釋。這樣的轉換會存在以下多種情...
C語言小專案 注釋轉換
這裡所說的注釋轉換是指將c風格的注釋轉換成c 風格的注釋。那麼我們如何來實現這個目的呢?首先我們得有乙個名為 input.c 的檔案 裡面寫著一段c風格的注釋和一些 而我們轉換後的注釋及 應該儲存在乙個名為 output.c 的檔案裡。要將 input.c中的內容轉換,我們就得將該檔案中的內容乙個乙...