(一) 将C语言的注释转化为C++的注释,我们可以分为7种情况:
// 1.一般情况
/* int i = 0; */
// 2.换行问题
/* int i = 0; */int j = 0;
/* int i = 0; */
int h = 0;
// 3.匹配问题
/*int i = 0;/*xxxxx*/
// 4.多行注释问题
/*
int i=0;
int j = 0;
int k = 0;
*/int k = 0;
// 5.连续注释问题
/**//**/
// 6.连续的**/问题
/***/
// 7.C++注释问题
// /*xxxxxxxxxxxx*/
以下是代码的实现:
enum FILE{ FILE_ERROR, FILE_SUCCESS};typedef enum State{ C_STAR, C_END}State; FILE *Fread; FILE *Fwrite; char first, second; State tag = C_END; if ((Fread = fopen("input.c", "r")) == NULL) { printf("打开文件失败,error:", errno); return FILE_ERROR; } if ((Fwrite = fopen("output.c", "w")) == NULL) { printf("打开文件失败,error:", errno); return FILE_ERROR; } do { first = fgetc(Fread); switch (first) { // 一般情况 case '/': second = fgetc(Fread); //匹配问题 if (second == '*'&&tag == C_END) { fputc('/', Fwrite); fputc('/', Fwrite); tag = C_STAR; } //c++注释问题 else if (second == '/') { char Next = fgetc(Fread); fputc('/', Fwrite); fputc('/', Fwrite); while (Next != '\n'&&Next != EOF) { fputc(Next, Fwrite); Next = fgetc(Fread); } fseek(Fread, -1, SEEK_CUR); } else { fputc(first, Fwrite); fputc(second, Fwrite); } break; case '*': second = fgetc(Fread); //换行问题连续注释问题 if (second == '/') { char Next = 0; Next = fgetc(Fread); if (Next != '\n'&&Next != EOF) { fseek(Fread, -1, SEEK_CUR); fputc('\n', Fwrite); } else { fputc('\n', Fwrite); } tag = C_END; } else if (second == '*') { fputc(first, Fwrite); fseek(Fread, -1, SEEK_CUR); break; } else { fputc(first, Fwrite); fputc(second, Fwrite); } break; //多行注释问题 case '\n': fputc('\n', Fwrite); if (tag == C_STAR) { fputc('/', Fwrite); fputc('/', Fwrite); } break; default: fputc(first, Fwrite); break; } } while (first != EOF); if (fclose(Fread) != 0) { printf("Error in closing read file \n"); } if (fclose(Fwrite) != 0) { printf("Error in closing write file \n"); }
然后来看输出:
// 1.一般情况
// int i = 0;
// 2.换行问题
// int i = 0;
int j = 0;
// int i = 0;
int h = 0;
// 3.匹配问题
//int i = 0;/*xxxxx
// 4.多行注释问题
//
//int i=0;
//int j = 0;
//int k = 0;
//
int k = 0;
// 5.连续注释问题
//
//
// 6.连续的**/问题
//*
// 7.C++注释问题
// /*xxxxxxxxxxxx*/