首先要將文字分成四個狀態:
1.普通狀態(nullstatus)
2.c狀態(cstatus)
3.cpp狀態(cpstatus)
4.eof狀態(eofstatus)
四個狀態之間的關係如下:
程式**如下:
main.c
#include"convert.h"
int main()
convert.h
#ifndef __covert_h__
#define __covert_h__
#include
#include
#define inputfile "input.c"
#define outputfile "output.c"
enum;
void convert_main();
#endif
convert.c
#include"convert.h"
int status = nullstatus;
void do_null_status(file *ifp,file *ofp)
}break;
case eof:
status = eofstatus;
break;
default:
fputc(c, ofp);
status = nullstatus;
break;
}}void do_cpp_status(file *ifp, file *ofp)
}void do_c_status(file *ifp, file *ofp)
}break;
case eof:
status = eofstatus;
break;
case
'\n':
fputc(c, ofp);
fputc('/', ofp);
fputc('/', ofp);
status = cstatus;
break;
default:
fputc(c, ofp);
status = cstatus;
break;
}}static
void convert_work(file *ifp, file *ofp)
}}void convert_main()
convert_work(ifp, ofp);
fclose(ifp);
fclose(ofp);
}
測試用例 input.c的內容:
// 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.連續注釋問題
/*int a = 0;*/
/*int b = 0;*/
// 6.連續的**/問題
/***/
// 7.c++注釋問題
// /**************/
程式執行之後,output.c的內容:
// 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.連續注釋問題
//int a = 0;
//int b = 0;
// 6.連續的**/問題
//*// 7.c++注釋問題
// /**************/
c的注釋轉換成cpp
我們知道注釋轉換中有分為四個模式 nul 格式 開始讀取注釋 c格式 c 格式 end格式 結束程式 下面我用一張圖來解釋如下的關係。該圖清晰地展示了這四種格式的關係,下面用 來實現上圖。commentconvert.h define crt secure no warnings 1 ifndef ...
C語言 注釋轉換(C風格 C 風格)
其中有一些檔案操作函式,不懂的可以看這篇部落格 首先,我們要知道乙個檔案中至少有五種狀態,我們用狀態圖表示 解讀 我們從 不是注釋 的狀態開始,請看下圖 有以下幾種情況需要注意 轉變成 轉變成 判斷是否為換行,如果換行需要輸入 轉變成 如果準備出注釋的時候,遇到 先保留看下乙個字元是不是 如果是 在...
Child風格對話方塊轉換成Popup風格對話方塊
對於同乙個dialog資源,在不同的環境中可能需要顯示的方式不一樣。本人在開發中遇到的就是這種問題,在一種環境中需要的是對話方塊做嵌入式child顯示,而另一處環境需要的是popup彈出式顯示,有的人說弄兩個資源,乙個是子對話內嵌另乙個是彈出式對話方塊,這樣又不免重複了。首先,資源裡的對話方塊設定為...