C语言实现注释转换
2016-08-03 18:55
330 查看
将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; }运行结果:
相关文章推荐
- c语言实现代码C风格到C++风格的注释转换
- C语言实现注释转换
- C语言实现C到C++的注释转换
- C语言实现C到C++的注释转换
- 求{1,2,3,...m}的幂集之C语言实现
- 用C语言实现八数码问题
- 链表的c语言实现(二)
- 用C语言来实现hex文件到coe文件的转化[原创]
- C语言实现MATLAB 6.5中M文件的方法
- C语言使用openSSL库DES模块实现加密功能详解
- C语言中的面向对象(2)-C语言的多态实现
- 链表的c语言实现(六)
- 链表的c语言实现(四)
- DataStructure---LinkList 链表C语言实现代码
- c语言中时间陷阱的实现
- lzw压缩算法的c语言实现
- 链表的c语言实现(三)
- 求住 谁能帮我用java或c语言 实现一下公式 任意输入数字可出结果~~
- 链表的C语言实现(五)
- 用c语言实现艺术清屏