C语言到c++的第一步 注释转换
来源:互联网 发布:阿里云搭建http代理 编辑:程序博客网 时间:2024/05/02 02:39
1.普通情况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++注释问题 // /*xxxxxxxxxxx*/ void AnnotationConvert(const char* inputFile, const char* 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语言注释的开始还是结束 typedef enum State{C_BEGIN,C_END,}State; void Convert(FILE* fIn, FILE*fOut){ //断言文件流 assert(fIn);assert(fOut); char first, second;//读取两个字符State tag = C_END;do{first = fgetc(fIn);switch (first){//1.普通情况 /*int i = 0;*/case'/':second = fgetc(fIn); if (second == '*')//当读取的第一个字符为/第二个字符为*时{//3.匹配问题/*int i = 0;/*xxxxx*/ if (tag == C_END)//判断是否上一个C语言注释已结束,即一个C语言注释的开始, //若是,转化为c++注释的开始{fputc('/', fOut);fputc('/', fOut);tag = C_BEGIN;} else //若不是,按原样输出{fputc('/', fOut);fputc('*', fOut);}} //7.c++注释问题 // /*xxxxxxxxxxx*/ else if (second == '/') //当读取的第一个字符为/且第二个字符也为/{ fputc('/', fOut); //按原样输出fputc('/', fOut); char next; 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 == '/') //当第一个字符为*第二个字符为/时输出一个换行{char next = fgetc(fIn);//5.多行注释 /**//**/fputc('\n', fOut); if (next == '/') //当读取的第三个字符也为/时,倒退读取一个字符判断是否为多行注释的问题{ fseek(fIn, -1, SEEK_CUR);//倒退读取}//2.换行问题/*int i = 0;*/intj = 0; else if (next != '\n'&& next != EOF) //当读取的第三个字符不为换行不是/且不是文件结束的标志时,输出第三个字符{fputc(next, fOut);}else {fputc('\n', fOut);} tag = C_END; //C语言注释的结尾,将用作标志的枚举常量置为end}//6.连续的**/问题 /***/ else if (second == '*') //当读取的第二个字符为*时,输出第一个字符且倒退读取一个字符{fputc(first, fOut);fseek(fIn, -1, SEEK_CUR);}else{fputc(first, fOut);fputc(second, fOut);}break;case'\n':// 4.多行注释 /*int i = 0; int j = 0; int k = 0; */int k = 0; //当读取到的第一个字符为换行时首先输出一个换行fputc('\n', fOut);if (tag == C_BEGIN) //判断是否为一个C语言注释的开始,若是,进行转化{fputc('/', fOut);fputc('/', fOut);}break;default:fputc(first, fOut);break;} }while (first != EOF); //读取到的字符不是文件结束} /*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++注释问题 // /*xxxxxxxxxxx*/ void AnnotationConvert(const char* inputFile, const char* 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语言注释的开始还是结束 typedef enum State{C_BEGIN,C_END,}State; void Convert(FILE* fIn, FILE*fOut){ //断言文件流 assert(fIn);assert(fOut); char first, second;//读取两个字符State tag = C_END;do{first = fgetc(fIn);switch (first){//1.普通情况 /*int i = 0;*/case'/':second = fgetc(fIn); if (second == '*')//当读取的第一个字符为/第二个字符为*时{//3.匹配问题/*int i = 0;/*xxxxx*/ if (tag == C_END)//判断是否上一个C语言注释已结束,即一个C语言注释的开始, //若是,转化为c++注释的开始{fputc('/', fOut);fputc('/', fOut);tag = C_BEGIN;} else //若不是,按原样输出{fputc('/', fOut);fputc('*', fOut);}} //7.c++注释问题 // /*xxxxxxxxxxx*/ else if (second == '/') //当读取的第一个字符为/且第二个字符也为/{ fputc('/', fOut); //按原样输出fputc('/', fOut); char next; 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 == '/') //当第一个字符为*第二个字符为/时输出一个换行{char next = fgetc(fIn);//5.多行注释 /**//**/fputc('\n', fOut); if (next == '/') //当读取的第三个字符也为/时,倒退读取一个字符判断是否为多行注释的问题{ fseek(fIn, -1, SEEK_CUR);//倒退读取}//2.换行问题/*int i = 0;*/intj = 0; else if (next != '\n'&& next != EOF) //当读取的第三个字符不为换行不是/且不是文件结束的标志时,输出第三个字符{fputc(next, fOut);}else {fputc('\n', fOut);} tag = C_END; //C语言注释的结尾,将用作标志的枚举常量置为end}//6.连续的**/问题 /***/ else if (second == '*') //当读取的第二个字符为*时,输出第一个字符且倒退读取一个字符{fputc(first, fOut);fseek(fIn, -1, SEEK_CUR);}else{fputc(first, fOut);fputc(second, fOut);}break;case'\n':// 4.多行注释 /*int i = 0; int j = 0; int k = 0; */int k = 0; //当读取到的第一个字符为换行时首先输出一个换行fputc('\n', fOut);if (tag == C_BEGIN) //判断是否为一个C语言注释的开始,若是,进行转化{fputc('/', fOut);fputc('/', fOut);}break;default:fputc(first, fOut);break;} }while (first != EOF); //读取到的字符不是文件结束}
好了,写到这里就结束了,程序猿的日子真累!!!
1 0
- C语言到c++的第一步 注释转换
- C语言实现C到C++的注释转换
- 用C语言实现 C到C++的注释转换
- C语言的第一步
- 【C语言】注释转换
- C语言 注释转换
- 【C语言】注释转换
- 注释转换(C到C++的注释转换)
- C到C++注释的转换
- C到CPP的注释转换
- 用C语言实现从C到C++的注释转换
- c语言实现代码C风格到C++风格的注释转换
- 关于C语言的第一步
- 【小项目】注释风格转换(从C语言注释风格转换到C++注释风格)
- c语言注释转换(c注释转换成c++注释)
- C语言的注释与C++注释的转换
- C语言注释与C++注释的相互转换
- C语言注释转换为c++的注释
- epub是什么文件?epub文件怎么打开?
- CSAPP3e - x86-64 assembly code analysis - Bomb Lab: phase 4
- Jackson入门教程
- 给定一个未排序的整数数组,找到其中位数。 中位数是排序后数组的中间值,
- C语言学习篇-9指针运算、指针与数组
- C语言到c++的第一步 注释转换
- POJ 2688 Cleaning Robot
- java socket实现文件的上传和下载试例
- 两款JSON类库Jackson与JSON-lib的性能对比
- 工厂模式
- Class.forName()用法详解
- linux如何查看系统信息,系统命令
- Picasso入门教程(八)通过Tag()来管理图片
- WebService 的缓存机制