注释转换(C注释转换为c++注释)
来源:互联网 发布:2017年中国m2数据 编辑:程序博客网 时间:2024/06/05 05:23
对于注释转换首先给出我的测试图:
由图可以看出将左边的c语言注释转换为右边c++注释就是注释转换
首先说明一下转换思想方法:
1.创建两个文件input.c和output.c,input.c里面用来读取c语言的注释,output.c里面保存转换成为c++的注释,中间的转换过程就是代码完成,当然文件名字和作用自己规定
2.转换的实际过程就是从存放c语言注释的文件中读取数据这里是一个字符一个字符读取,然后通过相关的函数将其转换为c++注释后的代码再写入保存c++注释的文件中
当然这里会用fgetc和fputc函数,其实这个项目就是练习文件的读写能力
在这里封装了三个函数:
1.void donulstate(FILE *pfin, FILE *pfout, enum STATE *s);//非C++,C状态的函数声明这个是不存在注释的代码语句处理函数,即刚开始进入文件读写的函数
2.void docstate(FILE *pfin, FILE *pfout, enum STATE *s);//c状态进行操作这个是发现是c语言注释的语句,则用这个函数将其改造为c++注释
3.void docppstate(FILE *pfin, FILE *pfout, enum STATE *s);//c++状态进行操作这个是发现是c语言注释的语句,则用这个函数将其改造读写到保存c++注释额文件中
其核心的思想部分是这个样子,我用图来解释:
接下来给出具体的代码
首先给出commentconver.h头文件
#define _CRT_SECURE_NO_WARNINGS 1#ifndef __COMMENT_CONVER_H__#define __COMMENT_CONVER_H__#include<stdio.h>#include<stdlib.h>enum STATE{END_STATE,//结束NUL_STATE,//无状态C_STATE,//c注释函数CPP_STATE,//c++状态};void donulstate(FILE *pfin, FILE *pfout, enum STATE *s);//非C++,C,结束状态的函数声明void docstate(FILE *pfin, FILE *pfout, enum STATE *s);//c状态进行操作void docppstate(FILE *pfin, FILE *pfout, enum STATE *s);//c++状态进行操作#endif接下来给出commentconver.c具体状态函数的实现代码
#define _CRT_SECURE_NO_WARNINGS 1#include"CommentConver.h"void donulstate(FILE *pfin, FILE *pfout, enum STATE *s)//开始无状态{int first =0;first = fgetc(pfin);switch (first){case '/'://第一个读取到'/'{int sceond = fgetc(pfin);switch (sceond){case '/'://第二个也读取‘/’,c++注释{*s = CPP_STATE;//状态转化到c++状态里面去fputc(first, pfout);fputc(sceond, pfout);}break;case '*'://第二个读取到*为c的注释{*s = C_STATE;//状态转换到c状态里面去fputc('/', pfout);fputc('/', pfout);}break;default://其他非注释情况直接读取{ fputc(first, pfout); fputc(sceond, pfout);}break;}}break;case EOF://直接文件读取结束{*s = END_STATE;}break;default://刚开始未发现注释相关符号{ fputc(first, pfout);}break;}}void docstate(FILE *pfin, FILE *pfout, enum STATE *s)//C注释状态{int first = 0;first = fgetc(pfin);switch (first){ case '*'://结尾读取到* {int sceond = 0;sceond = fgetc(pfin);switch (sceond){case '/'://一般情况:/* int i = 0; */{*s = NUL_STATE;//不需要操作}break;case '*'://连续注释问题如:/***/{fputc(first, pfout);ungetc(sceond, pfin);}break;default://其它非注释情况{ fputc(first, pfout); fputc(sceond, pfout);}} }break;case '\n'://多行注释问题{ fputc(first, pfout); fputc('/', pfout); fputc('/', pfout); }break;default://结尾直接是其他非注释情况{ fputc(first, pfout);}break;}}void docppstate(FILE *pfin, FILE *pfout, enum STATE *s)//c++注释状态{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;}}最后给出test.c
#define _CRT_SECURE_NO_WARNINGS 1#include"CommentConver.h"void commentconver(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;}}}void test(){FILE *pfin = fopen("input.c", "r");//从文件里面读取东西if (pfin == NULL){perror("use open file read");exit(EXIT_FAILURE);}FILE *pfout = fopen("output.c", "w");//往文件里面写东西if (pfout == NULL){perror("use open file write");exit(EXIT_FAILURE);}//commentconver(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注释转换为cpp注释
- [注释转化]C语言注释转换为C++语言注释
- C语言小项目—注释转换( C注释转换为C++注释 )
- 注释转换<C注释-->C++注释>
- 注释转换(C->C++)
- 注释转换(C---->C++)
- 注释转换(C->C++)
- 注释转换(C --> C++)
- 注释转换(C->C++)
- C\C++注释风格转换(段注释转换为行注释)
- 注释转换(c++注释到C注释)
- 注释转换(C注释风格-C++注释风格)
- lua-4 数组与迭代、元表
- hexo搭建博客文章目录分析
- Java提高篇——equals()与hashCode()方法详解
- POJ 2115 Looooops 扩展欧几里德 Java
- STM32外部中断初始化
- 注释转换(C注释转换为c++注释)
- LeetCode-Add Two Numbers II
- 【自考】-信息系统开发管理-第一遍
- python读写文件
- oracle数据库《2》
- 设计模式总述和跳转目录
- 团队管理和leadership的一些感悟
- PKU 1046-Square Number(数论)
- Linux的初级命令行