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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 11个月婴儿便秘怎么办 80多岁老人便秘怎么办 狗狗便秘拉不出来怎么办 2个月幼犬便秘怎么办 狗狗便秘怎么办吃什么 痔疮又痛又痒怎么办 痔疮肉球特别痒怎么办 长了个小痔疮怎么办 产后4天没大便怎么办 7个月孕妇痔疮怎么办 运动完恶心想吐怎么办 跑步后恶心想吐怎么办 肠子不蠕动严重便秘怎么办 怀孕八个月严重便秘怎么办 怀孕七个月便秘严重怎么办 怀孕两个月便秘严重怎么办 3岁宝宝上火便秘怎么办 7个月的宝宝贫血怎么办 9个月婴儿贫血怎么办 肛裂大便有血怎么办 生完宝宝肛门痛怎么办 肛周脓肿出血了怎么办 胃胀怎么办简单的办法 吃多了胃胀难受怎么办 胃窦炎胆汁反流怎么办 怀孕总胆汁酸高怎么办 胃里胆汁反流怎么办 苦胆水吐出来了怎么办 喝多了吐胆汁怎么办 吐出黄水苦水是怎么办 喝酒喝的一直吐怎么办 孕期总胆汁酸高怎么办 孕早期胆汁酸高怎么办 孕妇总胆汁酸高怎么办 宝宝一天吐了6次怎么办 肛周脓肿破了怎么办 肛周脓肿发烧了怎么办 肛周脓肿便血该怎么办 婴儿得肛周脓肿怎么办 水痘长在龟头上怎么办 轻度萎缩性胃炎伴肠化怎么办