注释转换项目

    xiaoxiao2024-11-30  4

    注释转换:由C语言的注释全部转换为C++的注释风格。

    从input.c文件里读取的内容注释转换存储到output.c文件中。

    状态图为:

                         通常采用switch case语句来处理。

    input.c文件里的内容为:

    // 1.一般情况 /* int i = 0; */ // 2.换行问题 /* int i = 0; */int j = 0; /* int i = 0; */ //int j = 0; // 3.匹配问题 /*int i = 0;/*xxxxx*/ // 4.多行注释问题 /* int i=0; int j = 0; int k = 0; */int k = 0; // 5.连续注释问题 /**//**/ // 6.连续的**/问题 /***/ // 7.C++注释问题 // /*xxxxxxxxxxxx*/

    代码为:

    测试源文件 test.c

    #include "commentconvert.h" int main() { int frist=0; FILE* pfout=NULL; FILE* pfin=NULL; enum STATE state=NUL_STATE; pfin=fopen(INPUT,"r"); if(pfin==NULL) { perror("out of read"); exit(EXIT_FAILURE); } pfout=fopen(OUTPUT,"w"); if(pfout==NULL) { perror("out of write"); fclose(pfin); exit(EXIT_FAILURE); } while(state!=END_STATE) { switch(state) { case NUL_STATE: { DONULSTATE(pfin,pfout,&state); } break; case C_STATE: { DOCSTATE(pfin,pfout,&state); } break; case CPP_STATE: { DOCPPSTATE(pfin,pfout,&state); } break; default: break; } } printf("转换成功\n"); system("pause"); return 0; } 头文件commentconvert.h

    #ifndef _COMMENTCONVERT_H__ #define _COMMENTCONVERT_H__ #include <stdio.h> #include <stdlib.h> #define INPUT "input.c" #define OUTPUT "output.c" enum STATE { END_STATE, NUL_STATE, C_STATE, CPP_STATE }; void DONULSTATE(FILE* pfin,FILE* pfout,enum STATE* state); void DOCSTATE(FILE* pfin,FILE* pfout,enum STATE* state); void DOCPPSTATE(FILE* pfin,FILE* pfout,enum STATE* state); #endif //_COMMENTCONVERT_H__

    源文件commentconvert.h

    #include "commentconvert.h" void DONULSTATE(FILE* pfin,FILE* pfout,enum STATE* state) { int frist=0; int second=0; frist=fgetc(pfin); switch(frist) { case '/': { second=fgetc(pfin); switch(second) { case '*': { fputc('/',pfout); fputc('/',pfout); *state=C_STATE; } break; case '/': fputc(frist,pfout); fputc(second,pfout); *state=CPP_STATE; break; default: break; } } break; case EOF: *state=END_STATE; break; default: fputc(frist,pfout); break; } } void DOCSTATE(FILE* pfin,FILE* pfout,enum STATE* state) { int frist=0; int second=0; int thrid=0; frist=fgetc(pfin); switch(frist) { case '*': { second=fgetc(pfin); switch(second) { case '/': thrid=fgetc(pfin); switch(thrid) { case '\n': fputc(thrid,pfout); *state=NUL_STATE; break; case '/': fputc('\n',pfout); ungetc(thrid,pfin); *state=NUL_STATE; break; default: fputc('\n',pfout); ungetc(thrid,pfin); //撤销字符 *state=NUL_STATE; break; } break; default: fputc(frist,pfout); ungetc(second,pfin); break; } } break; case '\n': fputc(frist,pfout); fputc('/',pfout); fputc('/',pfout); break; default: fputc(frist,pfout); break; } } void DOCPPSTATE(FILE* pfin,FILE* pfout,enum STATE* state) { int frist=0; frist=fgetc(pfin); switch(frist) { case '\n': fputc(frist,pfout); *state=NUL_STATE; break; case EOF: *state=END_STATE; break; default: fputc(frist,pfout); break; } } 最后转换完成后output.c文件里的内容为:

    // 1.一般情况 // int i = 0; // 2.换行问题 // int i = 0; int j = 0; // int i = 0; //int j = 0; // 3.匹配问题 //int i = 0;/*xxxxx // 4.多行注释问题 // //int i=0; //int j = 0; //int k = 0; // int k = 0; // 5.连续注释问题 // // // 6.连续的**/问题 //* // 7.C++注释问题 // /*xxxxxxxxxxxx*/

    转载请注明原文地址: https://ju.6miu.com/read-1294130.html
    最新回复(0)