本專案基於乙個狀態機的思想,每次處理完成之後通過狀態的裝換繼續處理後邊的內容。另外,利用各類的檔案操作函式,實現將將c風格的注釋裝換成c++風格的注釋的乙個簡單功能。大概如下圖:
什麼是狀態機?
在本專案中,會用到四種狀態,既空狀態(正常**區)、c注釋狀態(c風格注釋區)、c++注釋狀態(c++風格注釋區)、檔案結束狀態(eof),下面是四種狀態的裝換圖:
因為c注釋區里的內容不可能包括檔案結束標誌,所以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.連續注釋問題
/**//**/
// 6.連續的**/問題
/***/
// 7.c++注釋問題
// /**************/
commentcovert.h#ifndef __commentcovert_h__
#define __commentcovert_h__
enum status
;#include
#include
#pragma
warning(disable:4996)
void commentcovert(file *pfin, file *pfout);
void donulstaus(file *pfin, file *pfout, enum status *ps);
void docstaus(file *pfin, file *pfout, enum status *ps);
void docppstaus(file *pfin, file *pfout, enum status *ps);
#endif //__commentcovert_h__
commentcovert.c//為了方便理解,下面的**存在向原狀態裝換的過程,這是不必要的,已經注釋掉。
#include"commentcovert.h"
//正常**處理
void donulstaus(file *pfin, file *pfout, enum status *ps)
break;
case
'/':
break;
default:
break;}}
break;
case eof:
break;
default:
break;}}
//c風格**注釋區處理
void docstaus(file *pfin, file *pfout, enum status *ps)
else
*ps = nul_status;
}break;
case
'*':
break;
default:
break;}}
break;
case
'\n':
break;
default:
break;}}
//c++風格**注釋區處理
void docppstaus(file *pfin, file *pfout, enum status *ps)
break;
case eof:
fputc(first, pfout);
*ps = end_status;
break;
default:
fputc(first,pfout);
/**ps = cpp_staus;*/
break;}}
fseek的簡單理解seek_set: 檔案開頭
seek_cur: 當前位置
seek_end: 檔案結尾
其中seek_set,seek_cur和seek_end依次為0,1和2
例如:fseek(fp,100l,0);把stream指標移動到離檔案開頭100位元組處;
fseek(fp,100l,1);把stream指標移動到離檔案當前位置100位元組處;
fseek(fp,-100l,2);把stream指標退回到離檔案結尾100位元組處。
test.c#include"commentcovert.h"
void commentcovert(file *pfin, file *pfout)}}
int main()
pfout = fopen("output.c", "w");
if (pfout == null)
//注釋轉換
commentcovert(pfin, pfout);
fclose(pfin);
pfin = null;
fclose(pfout);
pfout = null;
return
0; }
源**:commentcover 注釋轉換(C注釋轉換為c 注釋)
對於注釋轉換首先給出我的測試圖 由圖可以看出將左邊的c語言注釋轉換為右邊c 注釋就是注釋轉換 首先說明一下轉換思想方法 1.建立兩個檔案input.c和output.c,input.c裡面用來讀取c語言的注釋,output.c裡面儲存轉換成為c 的注釋,中間的轉換過程就是 完成,當然檔案名字和作用自...
注釋轉換C 注釋》
注意 中所用到的fopen,fwrite,fread等檔案操作函式在通訊錄檔案流部落格中做了介 紹 ungetc 函式是將從檔案中讀取的乙個字元還回到緩衝區,即檔案中去 分析思路圖 分析思路圖 自定義標頭檔案部分 ifndef comment convert h define comment con...
注釋轉換 C注釋轉換為標準C 注釋
注釋轉換 c 注釋轉換為標準c語言注釋 直接上 include include include typedef enum state state typedef enum tag tag pragma warning disable 4996 state annotationconvert file...