c语言走向c++的第一步,注释转换
最近刚开始学习c++,接触了一个小项目,写一个程序将C语言的注释转化为c++的注释,这个里面也要分很多种情况,下面我就把我做的小程序分享出来,
在把C语言注释转化为c++注释的过程中,列举了以下几种情况
1.普通情况
/*inti=0;
2.换行问题
/*inti=0;*/intj=0;/*inti=0;*/intj=0;
3.匹配问题
/*inti=0;/*xxxxx*/
4.多行注释
/*inti=0;intj=0;intk=0;*/intk=0;
5.连续注释
/**//**/
6.连续的**/问题
/***/
7.c++注释问题
// /*xxxxxxxxxxx*/
下面就分情况处理一下这几种情况 首先,你要成功创建一个文件并能够把C语言的注释写进去
voidAnnotationConvert(constchar*inputFile,constchar*outputFile){FILE*fIn=fopen(inputFile,"r");//用只读的方式打开一个文件//检测文件是否打开成功,并输出错误码//只读方式打开文件失败,有可能是文件不存在或路径错误等问题if(fIn==NULL){printf("打开文件%s失败,errno:%d",inputFile,errno);return;}//写方式打开文件失败,这是要注意关闭已打开的fIn,否则可能导致内存泄漏等问题FILE*fOut=fopen(outputFile,"w");if(fOut==NULL){fclose(fIn);//关闭文件流printf("打开文件%s失败,errno:%d",outputFile,errno);return;}Convert(fIn,fOut);//打开文件成功,要注意关闭文件流fclose(fIn);fclose(fOut);}在这里,可以定义两个枚举常量用来判断是c语言注释的开始还是结束typedefenumState{C_BEGIN,C_END,}State;voidConvert(FILE*fIn,FILE*fOut){//断言文件流assert(fIn);assert(fOut);charfirst,second;//读取两个字符Statetag=C_END;do{first=fgetc(fIn);switch(first){//1.普通情况/*inti=0;*/case'/':second=fgetc(fIn);if(second=='*')//当读取的第一个字符为/第二个字符为*时{//3.匹配问题/*inti=0;/*xxxxx*/if(tag==C_END)//判断是否上一个C语言注释已结束,即一个C语言注释的开始,//若是,转化为c++注释的开始{fputc('/',fOut);fputc('/',fOut);tag=C_BEGIN;}else//若不是,按原样输出{fputc('/',fOut);fputc('*',fOut);}}//7.c++注释问题///*xxxxxxxxxxx*/elseif(second=='/')//当读取的第一个字符为/且第二个字符也为/{fputc('/',fOut);//按原样输出fputc('/',fOut);charnext;do{next=fgetc(fIn);//读取第三个字符并输出它fputc(next,fOut);}while(next!='\n'&&next!=EOF);}else{fputc(first,fOut);fputc(second,fOut);}break;case'*':second=fgetc(fIn);if(second=='/')//当第一个字符为*第二个字符为/时输出一个换行{charnext=fgetc(fIn);//5.多行注释/**//**/fputc('\n',fOut);if(next=='/')//当读取的第三个字符也为/时,倒退读取一个字符判断是否为多行注释的问题{fseek(fIn,-1,SEEK_CUR);//倒退读取}//2.换行问题/*inti=0;*/intj=0;elseif(next!='\n'&&next!=EOF)//当读取的第三个字符不为换行不是/且不是文件结束的标志时,输出第三个字符{fputc(next,fOut);}else{fputc('\n',fOut);}tag=C_END;//C语言注释的结尾,将用作标志的枚举常量置为end}//6.连续的**/问题/***/elseif(second=='*')//当读取的第二个字符为*时,输出第一个字符且倒退读取一个字符{fputc(first,fOut);fseek(fIn,-1,SEEK_CUR);}else{fputc(first,fOut);fputc(second,fOut);}break;case'\n'://4.多行注释/*inti=0;intj=0;intk=0;*/intk=0;//当读取到的第一个字符为换行时首先输出一个换行fputc('\n',fOut);if(tag==C_BEGIN)//判断是否为一个C语言注释的开始,若是,进行转化{fputc('/',fOut);fputc('/',fOut);}break;default:fputc(first,fOut);break;}}while(first!=EOF);//读取到的字符不是文件结束}
这样子一个注释转换的小项目就基本完成了
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。