注释转换 续 (C++注释转换为C注释)
来源:互联网 发布:传奇霸业轮回魔道数据 编辑:程序博客网 时间:2024/05/17 11:35
注释转换 续
关于注释转换的问题 ,这里就不提了。之前就已经 说明过是什么意思了
如果你你要是不知道 ,就点击这里 看看吧 注释转换
今天 要说的是将 C++注释转换为C语言注释 ,大家都知道 C++注释的风格 是 //.......注释一行 ,然后以\n作为
结束标志的,所以要将注释转换 , 也同样要考虑多种 用问题 ,
下面是我写的一些实例
/* 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;
代码实现
~~~~~~~~~~头文件 .h~~~~~~~~~~~~
#pragma once #include<stdio.h>#include<stdlib.h>enum STATE //定义一个枚举类型 表示 此时代码的状态{NUL,//无注释状态 C,//C语言注释状态CPP,//C++注释状态END//代码结束状态};//执行转换函数void CommentConvert(FILE *pfin,FILE * pfout);//pfin 表示的是要读取的文件 ,pfout表示转换后输出的文件//无状态转换void DoNULConvert(FILE *pfin,FILE * pfout,enum STATE * state);//c状态转换void DoCConvert(FILE *pfin,FILE * pfout,enum STATE * state);//c++状态转换void DoCPPConvert(FILE *pfin,FILE * pfout,enum STATE * state);
~~~~~~~~~~~源文件.c~~~~~~~~~~~
#define _CRT_SECURE_NO_WARNINGS #include "CommentConvert.h"void CommentConvert(FILE *pfin,FILE * pfout){enum STATE state = NUL;//初始化状态 为 无注释状态while(state != END)//代码结束时跳出循环{switch(state){case NUL://状态为无注释状态{DoNULConvert(pfin,pfout,&state);}break;case C://状态为C注释状态{DoCConvert(pfin,pfout,&state);}break;case CPP://状态为C++注释状态{DoCPPConvert(pfin,pfout,&state);}break;default:break;}}}//无状态转换void DoNULConvert(FILE *pfin,FILE * pfout,enum STATE * state){int start = 0;int next = 0;start = fgetc(pfin);//从文件中读取一个字符 来判断switch( start){case '/'://表示要进入注释状态 {next = fgetc(pfin);//再从文件中读取一个字符 判断switch(next){case '*'://表示代码是 /* 表示进入C语言注释状态{fputc(start,pfout);//将注释输出到文件fputc(next,pfout);*state = C;//状态转换为 C注释状态}break;case '/'://表示代码是 // 表示进入C++注释状态{fputc('/',pfout);//j将它改为C注释 输出到文件fputc('*',pfout);*state = CPP; //状态转换为 C++注释状态}break;default: //表示这个'/ '是字符 {fputc(start,pfout); //将读取到的字符输出到文件ungetc(next,pfin);}break;}}break;case EOF://遇到EOF表示代码结束{fputc(start,pfout);//将EOF输到文件*state = END;//状态改为 END}break;default://表示遇到的不是注释 ,状态不变 {fputc(start,pfout);//将读取的字符输出到文件}break ;}}//c++状态转换void DoCPPConvert(FILE *pfin,FILE * pfout,enum STATE * state){int start = 0;int next = 0;int then = 0;start = fgetc(pfin);//从文件中读取一个字符 来判断switch(start){case '\n' ://表示 C++一行注释结束 {next = fgetc(pfin);switch(next)//判断 下行 是不是也是注释{case '/':{then = fgetc(pfin);if(then =='*'){fputc('*',pfout);fputc('/',pfout);fputc(start,pfout);fputc(next,pfout);fputc(then,pfout);*state = C;}else if(then =='/'){fputc(start,pfout);}}break;case EOF:fputc('*',pfout);fputc('/',pfout);fputc(start,pfout);fputc(next,pfout);*state = END;break;default:fputc('*',pfout);fputc('/',pfout);fputc(start,pfout);fputc(next,pfout);*state = NUL;break;}}break;case '*':{next = fgetc(pfin);if(next == '/'){;}else{ungetc(next,pfin);fputc(start,pfout);}}break;default:fputc(start,pfout);break;}}//c状态转换void DoCConvert(FILE *pfin,FILE * pfout,enum STATE * state){int start = 0;int next = 0;int then = 0;start = fgetc(pfin);//从文件中读取一个字符 来判断switch(start)//c注释状态 不会直接转换为END状态{case '*'://遇到'*'表示C语言注释状态 可能会结束{next = fgetc(pfin); //再重新 读取 一个字符 switch(next)//判断{case '/'://表示 C语言注释 结束 {fputc(start,pfout);fputc(next,pfout);*state = NUL;//状态装换为无注释状态}break;default :{fputc(start,pfout);ungetc(next,pfin);//将多余用来判断的字符撤销 }break; }}break;default:fputc(start,pfout); //否则直接输出break;}}
~~~~~~~~~~~测试代码 .c~~~~~~~~~~~~
#define _CRT_SECURE_NO_WARNINGS #include "CommentConvert.h"int main(){FILE *pfin = NULL;//定义两文件指针FILE *pfout= NULL;pfin = fopen("input.c","r");//打开 读取 的文件 if(pfin == NULL){perror("input file open:");//读取失败exit(EXIT_FAILURE);}pfout = fopen("output.c","w");//打开 要写入 的文件 if(pfout ==NULL){perror("output file open:");//读取失败fclose(pfin);//要将读文件关闭取的exit(EXIT_FAILURE);}CommentConvert(pfin,pfout);printf("转换成功\n");fclose(pfin);//关闭两文件fclose(pfout);system("pause");return 0;}<strong></strong>
2 0
- 注释转换 续 (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注释转换为标准C++语言注释
- 使用Python+jieba和java+庖丁分词在Spark集群上进行中文分词统计
- JZOJ 4679【NOIP2016提高A组8.11】种树
- “让我怎能过大年”参考解法--很暴力
- Android -自定义外卖订单流程
- Android开源项目推荐之「网络请求哪家强」
- 注释转换 续 (C++注释转换为C注释)
- POJ3321/Apple tree/(DFS序+线段树)
- hihocoder #1309 : 任务分配
- EasyUI的自定义验证!
- 拉勾网爬虫
- 51nod (dp)
- UITextField一些常用属性和方法
- LeetCode 135. Candy
- Android开源项目推荐之「图片加载到底哪家强」