项目实战一(注释转换)

来源:互联网 发布:东方证券行情软件 编辑:程序博客网 时间:2024/06/06 05:51

项目一(注释转换)

解释说明:

本项目用来将一个.c或.cpp文件中的才语言注释全部更换成C++注释风格

@1单行注释转换
/*int a=0;*/—>//int a=0;
@2代码块注释转换

/*int a=0;int b=0;,,,*/

转换后

//int a=0;//int b=0;//,,,

\@3c语言类型注释类型大全

int a = 10;// 1.一般情况int num = 0;/* 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.连续注释问题/*int a=0;*//*int b=0;*/// 6.连续的**/问题/***/// 7.C++注释问题// /*xxxxxxxxxxxx*/

转换后

int a = 10;// 1.一般情况int num = 0;// 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.连续注释问题//int a=0;*///int b=0;*/// 6.连续的**/问题//**/// 7.C++注释问题// /*xxxxxxxxxxxx*/

代码如下

#include<stdio.h>#include<stdlib.h>enum Status{    LLL,    NUL_STATUS,    C_STATUS,    CPP_STATUS,    END_STATUS};//处理正常代码void DoNulStatus(FILE* pfIn, FILE* pfOut, enum Status* status){    int frist = 0;    int secont = 0;    //frist = fgetc(pfIn);    while (*status == NUL_STATUS)    {        frist = fgetc(pfIn);        switch (frist)        {        case '/':            secont = fgetc(pfIn);            switch (secont)            {            case '/':                fputc(frist, pfOut);                fputc(secont, pfOut);                *status = CPP_STATUS;                break;            case '*':                fputc('/',pfOut);                fputc('/', pfOut);                *status = C_STATUS;                break;            default:                fputc(frist, pfOut);                break;            }            break;        case EOF:            *status = END_STATUS;            break;        default:            fputc(frist, pfOut);            break;        }    }}//处理c语言注释代码void DoCStatus(FILE* pfIn, FILE* pfOut, enum Status* status){    int frist = 0;    int secont = 0;    int third = 0;    while (*status == C_STATUS)    {        frist = fgetc(pfIn);    switch (frist)        {loop:   case '*':            secont = getc(pfIn);            switch (secont)            {            case '/':                third = getc(pfIn);                //fputc(frist, pfOut);                //fputc(secont, pfOut);                if (third == '\n')                {                    fputc(frist, pfOut);                    fputc(secont, pfOut);                    fputc(third, pfOut);                    //*status = NUL_STATUS;                    //break;                }                ////else if (third=='/')                else                {                    fputc(frist, pfOut);                    fputc(secont, pfOut);                    fputc('\n', pfOut);                    ungetc(third,pfIn);                }                //fputc(third, pfOut);                *status = NUL_STATUS;                break;            case '*':                fputc(frist, pfOut);                frist = secont;                //secont = 0;                goto loop;                break;            default:                fputc(frist, pfOut);                fputc(secont, pfOut);                break;            }            break;        case EOF:            *status = END_STATUS;            break;        case '\n'://ungetc();            fputc(frist, pfOut);            fputc('/', pfOut);            fputc('/', pfOut);            break;        default:            fputc(frist, pfOut);            break;        }    }}//处理c++型注释代码void DoCppStatus(FILE* pfIn, FILE* pfOut, enum Status* status){    int frist = 0;    int secont = 0;    while (*status == CPP_STATUS)    {        frist = fgetc(pfIn);        switch (frist)        {        case '\n':            fputc(frist, pfOut);            *status = NUL_STATUS;            break;        case EOF:            *status = END_STATUS;            break;        default:            fputc(frist, pfOut);            break;        }    }}//代码调用部分void DoConvertWork(FILE* pfIn, FILE* pfOut){    enum Status s;    s = NUL_STATUS;    while(s)    {        switch (s)        {        case NUL_STATUS:            DoNulStatus(pfIn, pfOut, &s);            break;        case C_STATUS:            DoCStatus(pfIn, pfOut, &s);            break;        case CPP_STATUS:            DoCppStatus(pfIn, pfOut, &s);            break;        case END_STATUS:            break;        default:            break;        }    }}int main(void){    FILE *pfIn=NULL, *pfOut=NULL;    pfIn = fopen("input.txt","r");    if (pfIn == NULL)    {        perror("open input file error");        exit(1);    }    pfOut = fopen("output.txt","w");    if (pfOut == NULL)    {        perror("open output file error");        exit(1);    }    DoConvertWork(pfIn, pfOut);    fclose(pfIn);    fclose(pfOut);    system("pause");    return 0;}
原创粉丝点击