C语言编写注释风格转换
来源:互联网 发布:java基础面试题2017 编辑:程序博客网 时间:2024/05/18 02:55
首先先来看看转换之前的文件注释:
经过分析,我们发现这些注释无非就是在下面四种情况之间进行转换,所以可以很容易编写出代码
接下来编写我们的代码
1.Commentconvert.h
#define _CRT_SECURE_NO_WARNINGS 1#ifndef __COMMENT_CONVERT_H__#define __COMMENT_CONVERT_H__#include <stdio.h>#include <stdlib.h>enum STATE{NUL_STATE,//正常状态C_STATE, //C注释状态CPP_STATE,//C++注释状态END_STATE //文件结束};void DoCState(FILE *pfIn, FILE *pfOut, enum STATE *s);void DoCppState(FILE *pfIn, FILE *pfOut, enum STATE *s);void DoNulState(FILE *pfIn, FILE *pfOut, enum STATE *s);void DoConvetWork(FILE *pfIn, FILE *pfOut);#endif //__COMMENT_CONVERT_H__
2.Commentconvert.c
#define _CRT_SECURE_NO_WARNINGS 1#include "CommentConvert.h"void DoConvetWork(FILE *pfIn, FILE *pfOut){enum STATE state = NUL_STATE;while (state != END_STATE){switch (state){case NUL_STATE:DoNulState(pfIn, pfOut, &state);break;case C_STATE:DoCState(pfIn, pfOut, &state);break;case CPP_STATE:DoCppState(pfIn, pfOut, &state);break;default:break;}}}void DoNulState(FILE *pfIn, FILE *pfOut, enum STATE *s){int first = 0;int second = 0;first = fgetc(pfIn);switch (first){case '/':{second = fgetc(pfIn);if (second == '*'){fputc('/', pfOut);fputc('/', pfOut);*s = C_STATE;}else if (second == '/'){fputc(first, pfOut);fputc(second, pfOut);*s = CPP_STATE;}else{fputc(first, pfOut);fputc(second, pfOut);}}break;case EOF:{*s = END_STATE;}break;default:fputc(first, pfOut);break;}}void DoCState(FILE *pfIn, FILE *pfOut, enum STATE *s){int first = 0;int second = 0;int third = 0;first = fgetc(pfIn);switch (first){case '\n':{ fputc(first, pfOut); fputc('/', pfOut); fputc('/', pfOut);}break;case '*':{second = fgetc(pfIn);switch (second){case '/':{*s = NUL_STATE;third = fgetc(pfIn);if (third == '\n'){fputc(third, pfOut);}else if (third == '/'){ungetc(third, pfIn);fputc('\n', pfOut);}else{fputc('\n', pfOut);fputc(third, pfOut);}}break;case '*':{fputc(second, pfOut);ungetc('*', pfIn);}break;default:fputc(first, pfOut);fputc(second, pfOut);break;}}break;case EOF:*s = END_STATE;break;default:fputc(first, pfOut);break;}}void DoCppState(FILE *pfIn, FILE *pfOut, enum STATE *s){int first = 0;first = fgetc(pfIn);switch (first){case '\n':{ fputc(first, pfOut); *s = NUL_STATE;}break;case EOF:*s = END_STATE;break;default:fputc(first, pfOut);break;}}
3.test.c
#define _CRT_SECURE_NO_WARNINGS 1#include "CommentConvert.h"void test(){FILE *pfIn = NULL;FILE *pfOut = NULL;pfIn = fopen("input.c", "r");if (pfIn == NULL){perror("open file for read.");exit(EXIT_FAILURE);}pfOut = fopen("output.c", "w");if (pfOut == NULL){perror("open file for write.");fclose(pfIn);exit(EXIT_FAILURE);}DoConvetWork(pfIn, pfOut);fclose(pfIn);fclose(pfOut);}int main(){test();system("pause");return 0;}
接下来执行程序之后我们再来看看转换之后的文件注释:
这样我们的注释转换就完成了
1 0
- C语言编写注释风格转换
- 【小项目】注释风格转换(从C语言注释风格转换到C++注释风格)
- C语言项目:注释转换(C风格注释转换成C++风格注释)
- 注释转换—将C语言注释风格转换为C++注释风格
- C语言编写注释转换问题
- C语言注释风格
- C语言注释风格
- C语言注释风格
- 注释转换(C注释风格-C++注释风格)
- 注释转换(c风格转为c++风格)
- c语言实现代码C风格到C++风格的注释转换
- 【C语言】注释转换
- C语言 注释转换
- 【C语言】注释转换
- 注视转换 将C风格注释转换为C++风格
- C语言中的注释风格小结
- c语言注释转换(c注释转换成c++注释)
- 注释转换(c++风格转c风格)
- cajviewer 文件不存在或不能正常访问
- 安装数据库MySQL/MongoDB,启动时报错‘发生系统错误2’或者服务没有响应控制功能的解决办法
- c++输入函数及缓冲区管理
- win764位安装apache ftp sever1.6.0并解决在64位系统下出现的问题
- nyoj304节能(区间dp)
- C语言编写注释风格转换
- C++11比C++98(普通C++)的新特性
- task_struct源码
- 浮动专题
- GIT篇之常用git命令
- iOS 常见信息编码 加密的各种方法
- 欢迎使用CSDN-markdown编辑器
- Android 学习资源链接
- Java 注解那些事儿