将C语言注释转换成C++注释
#pragma once #pragma warning (disable:4996) typedef enum ConvertState { SUCCESS,//转换成功 FILE_ERROR,//打开文件失败 NO_MATCH,//转换失败 } ConvertState; //转换的状态 typedef enum State { C_BEGIN,//C语言注释开始 C_END,//C语言注释结束 CPP_BEGIN,//C++注释开始 CPP_END,//C++注释结束 }State; ConvertState Convert(FILE *fin, FILE *fout) { ConvertState ret = SUCCESS; char first, second; State tag = C_END; assert(fin); assert(fout); do{ first = fgetc(fin); switch (first) { case '/': second = fgetc(fin); if (second == '*') { //3/匹配问题 if (tag == C_END) { fputc('/',fout); fputc('/',fout); tag = C_BEGIN; } else { fputc('/', fout); fputc('*', fout); } } else if (second == '/') { char next; fputc('/', fout); fputc('/', fout); do{ next = fgetc(fin); fputc(next, fout); if (next == EOF) return ret; } while (next != '\n'); } else { fputc(first, fout); fputc(second, fout); } break; case '\n': //4.多行注释问题 fputc('\n', fout); if (tag == C_BEGIN) { fputc('/', fout); fputc('/', fout); } break; case '*': second = fgetc(fin); if (second == '/') { //2.换行问题 char next = fgetc(fin); //5.连续注释问题 if (next == '/') { fputc('/n', fout); fseek(fin, -1, SEEK_CUR); } else if (next != '\n'&&next != EOF) { fputc('\n', fout); fputc(next, fout); } else { fputc('/n', fout); } tag = C_END; } else if (second == '*') { fputc(first, fout); fseek(fin, -1, SEEK_CUR); } else { fputc(first, fout); fputc(second, fout); } break; default: if (first != EOF) { fputc(first, fout); } break; } } while (first != EOF); if (tag != C_END) { ret = NO_MATCH; } return ret; } ConvertState AnnotationConvert(const char*inputfile, const char* outputfile) { ConvertState ret; FILE* fout, *fin; fin = fopen(inputfile, "r"); if (fin == NULL) { printf("打开文件%s失败,errno:%d\n", inputfile, errno); return FILE_ERROR; } fout = fopen(outputfile, "w"); if (fout == NULL) { fclose(fin); printf("打开文件%s失败,errno:%d\n", outputfile, errno); return FILE_ERROR; } ret = Convert(fin, fout); fclose(fin); fclose(fout); return ret; }; void test() { char *inputfile = "C"; char *outputfile = "C++"; ConvertState flag=AnnotationConvert(inputfile, outputfile); if (flag == SUCCESS) { printf("转换成功,请查看"); } else if (flag == FILE_ERROR) { printf("打开文件失败"); } else { printf("转换失败=_=||"); } } #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<errno.h> #include"AnnotationConvert.h" int main() { test(); system("pause"); return 0; }
运行结果:
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享标题:C语言实现注释转换-创新互联
当前路径:https://www.cdcxhl.com/article0/coohoo.html
成都网站建设公司_创新互联,为您提供外贸建站、微信小程序、定制开发、面包屑导航、微信公众号、动态网站
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联