将c语言的注释转换成c++的注释
/*......*/ 转成 //......
测试用例:
1.一般情况
/* int a = 0; */
2.连续*
/***/
3.换行问题
/* int b = 0; */ int c = 0;
/* aaa */
int d = 0;
4.匹配问题
/*AAA/*BBB*/
/*int e = 0;/*xxxxxx*/
5.多行注释
/*
AAA
BBB
CCC
*/int aa;
6.连续注释
/*aaa*//*bbb*/
7.c++注释 (遇到c++注释直接读完一行)
// /**/
# include<stdio.h> # include<stdlib.h> enum Tag { C_BEGIN, C_END, }; void Convert(const char* fIn,char* fOut) { FILE* Input = fopen(fIn, "r"); if (NULL == Input) { printf("打开文件%s失败\n",fIn); return; } FILE* Output = fopen(fOut, "w"); if (NULL == Input) { printf("打开文件%s失败\n", fOut); return; } Tag tag = C_END; char ch = fgetc(Input); char second; while (ch != EOF) { switch (ch) { case ‘/‘: fputc(‘/‘, Output); second = fgetc(Input); if (second == ‘*‘) { //4.匹配问题 if (tag == C_END) { fputc(‘/‘, Output); tag = C_BEGIN; } else { fputc(‘*‘, Output); } } else if (second == ‘/‘) // 7. 碰到c++注释,读完一行 { fputc(second, Output); char cur; do { cur = fgetc(Input); if (cur == EOF) { return; } fputc(cur, Output); } while (cur != ‘\n‘); } else { fputc(second, Output); } break; case ‘*‘: second = fgetc(Input); if (second == ‘/‘ && tag == C_BEGIN) { // 3. 换行问题 char next = fgetc(Input); if (next != ‘\n‘ && next != EOF) { fputc(‘\n‘, Output); fseek(Input, -1, SEEK_CUR); //6.连续注释 /**//**/ } else { fputc(next, Output); } tag = C_END; } else // 2. /***/ { fputc(‘*‘, Output); fseek(Input, -1, SEEK_CUR); } break; case ‘\n‘: fputc(‘\n‘, Output); // 5. 多行注释 if (tag == C_BEGIN) { fputc(‘/‘, Output); fputc(‘/‘, Output); } break; default: fputc(ch, Output); } ch = fgetc(Input); } fclose(Input); fclose(Output); } void Test() { Convert("Input.cpp","Output.cpp"); } int main() { Test(); system("pause"); return 0; }
时间: 2024-10-20 08:07:19