【C语言】注释转换项目实现
2017-05-28 12:47
507 查看
编写一个小项目将一个一个文件中的注释都转换成C++的注释风格
设计部分:
(1)头文件模块:包括模块中需要引用的头文件定义,需要实现的主要函数的声明
(2)头文件中主要函数模块的实现:各个函数部分实现的细节
(3)测试函数:检验函数模块的功能
(4)写入一个输入文件
(5)运行结果记入一个输出文件中
主要解决的情况:
实现代码:
设计部分:
(1)头文件模块:包括模块中需要引用的头文件定义,需要实现的主要函数的声明
(2)头文件中主要函数模块的实现:各个函数部分实现的细节
(3)测试函数:检验函数模块的功能
(4)写入一个输入文件
(5)运行结果记入一个输出文件中
主要解决的情况:
// 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++注释问题 // /*xxxxxxxxxxxx*/
实现代码:
//CommentConver.h #ifndef __COMMENT_CONVER_H__ #define __COMMENT_CONVER_H__ #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<string.h> enum STATE { STATE_NULL, STATE_C, STATE_CPP, STATE_EOF }; void DoCommentCover(FILE* pfIn, FILE* pfOut); void DoNULL(FILE* pfIn, FILE* pfOut); void DoC(FILE* pfIn, FILE* pfOut); void DoCPP(FILE* pfIn, FILE* pfOut); #endif
//CommentCover.c #include "CommentConver.h" enum STATE state; void DoNULL(FILE*pfIn,FILE* pfOut) { int first = fgetc(pfIn); int second = 0; switch (first) { case'/': { second = fgetc(pfIn); if (second == '/') { state = STATE_CPP; fputc(first, pfOut); fputc(second, pfOut); } else if (second == '*') { fputc(first, pfOut); fputc('/', pfOut); state = STATE_C; } } break; case EOF: fputc(first, pfOut); state = STATE_EOF; break; default: fputc(first, pfOut); break; } } void DoC(FILE* pfIn, FILE* pfOut) { int first = fgetc(pfIn); int second = 0; int third = 0; switch (first) { case '*': { second = fgetc(pfIn); if (second == '/') { third = fgetc(pfIn); if (third == '\n') fputc(third, pfOut); else { ungetc(third, pfIn); fputc('\n', pfOut); } state = STATE_NULL; } else if (second == '*') { ungetc(second, pfIn); fputc(first, pfOut); } else { fputc(first, pfOut); fputc(second, pfOut); } } break; case '\n': fputc(first, pfOut); fputc('\n', pfOut); fputc('\n', pfOut); break; case EOF: state = STATE_EOF; default: fputc(first, pfOut); break; } } void DoCPP(FILE* pfIn, FILE* pfOut) { int first = fgetc(pfIn); int second = 0; switch (first) { case'\n': fputc(first, pfOut); state = STATE_NULL; break; case EOF: fputc(first, pfOut); state = STATE_EOF; break; default: fputc(first, pfOut); break; } } void DoCommentCover(FILE* pfIn, FILE* pfOut) { state = STATE_NULL; int first = 0; while (state!=STATE_EOF) { switch (state) { case STATE_NULL: DoNULL(pfIn, pfOut); break; case STATE_C: DoC(pfIn, pfOut); break; case STATE_CPP: DoCPP(pfIn, pfOut); break; case STATE_EOF: exit(EXIT_FAILURE); break; default: break; } } }
//test.c
#include "CommentConver.h" int main() { FILE *pfIn = fopen("input.c", "r"); FILE *pfOut = fopen("output.c", "w"); if (pfIn == NULL) { perror("input.c"); exit(EXIT_FAILURE); } if (pfOut == NULL) { perror("output.c"); fclose(pfIn); } DoCommentCover(pfIn, pfOut); printf("转换成功\n"); fclose(pfIn); fclose(pfOut); system("pause"); return 0; }
相关文章推荐
- 小项目注释转换完整版(用状态机实现)
- c语言注释转换项目
- 【C语言】实现注释转换(c->c++)
- C语言小项目—注释转换( C注释转换为C++注释 )
- 注释转换——C语言项目
- c语言实现注释转换(c转为c++)
- 实现C++注释转换为标准C语言注释
- 注释转换项目精益版实现
- 用C语言实现 C到C++的注释转换
- 实现c语言注释转换为c++注释
- C语言简单实现进制互相转换
- kD-tree 的C语言实现 带有史上最全的注释和解释
- 一个在终端实现类Linux shell(cd ls命令)UI界面的项目(C语言实现)
- C语言简单实现进制互相转换
- 24位真彩色位图和8位灰度位图相互转换(C语言实现)
- springMVC项目中实现Protocol Buffers对象自动转换
- 用C语言代码实现n进制数转换为十进制数
- C语言实现字节流与十六进制字符串的相互转换
- C语言实现dos2unix函数,Windows的回车换行转换成Unix回车换行
- KMP算法(Knuth-Morris-Pratt Algorithm)的C语言实现加注释