注释转换
来源:互联网 发布:海岛奇兵妹子升级数据 编辑:程序博客网 时间:2024/05/29 05:07
// 将c语言注释转化为cpp注释
//头文件 "commentconvert.h"
#ifndef __COMMENT_CONVERT_H__#define __COMMENT_CONVERT_H__#include<stdio.h>#include<stdlib.h>enum STATE //枚举四种状态{NUL_STATE, C_STATE, CPP_STATE, END_STATE};void CommentConvert1(FILE *pfin,FILE * pfout); //转换函数void DoNULConvert1(FILE *pfin,FILE * pfout,enum STATE * state);//无状态的转换void DoCConvert1(FILE *pfin,FILE * pfout,enum STATE * state); //c语言状态的转换void DoCPPConvert1(FILE *pfin,FILE * pfout,enum STATE * state); //cpp状态的转换#endif
主函数部分
void CommentConvert1(FILE *pfin,FILE * pfout){enum STATE state =NUL_STATE; while(state != END_STATE) {switch(state) //判断注释类型,调用对应的函数{case NUL_STATE: {DoNULConvert1(pfin,pfout,&state);}break;case C_STATE:{DoCConvert1(pfin,pfout,&state);}break;case CPP_STATE: {DoCPPConvert1(pfin,pfout,&state);}break;default:break;}}}void DoNULConvert1(FILE *pfin,FILE * pfout,enum STATE * state) { int first = fgetc(pfin); //从文件读取数据int second; switch(first) { case'/': second = fgetc(pfin); if(second == '*') { fputc(first,pfout); //将'/'写入文件 fputc('/',pfout); *state = C_STATE ; //c注释,当然此代码只是记录注释的状态,也可不写} else if(second == '/') { fputc(first,pfout); fputc(second,pfout); *state = CPP_STATE ; } else { fputc(first,pfout); fputc(second,pfout); } break; case EOF: fputc(first,pfout); *state = END_STATE ; break; default: fputc(first,pfout); break; } } void DoCConvert1(FILE *pfin,FILE * pfout,enum STATE * state) { int first = fgetc(pfin); int second = 0; switch(first) { case '*': second = fgetc(pfin); if(second == '/') { int third = fgetc(pfin); *state = NUL_STATE ; if(third != '\n') //处理多行注释问题{ fputc('\n',pfout); ungetc(third,pfin); } if(third == '\n') { fputc(third,pfout); } } else { fputc(first,pfout); ungetc(second,pfin); } break; case '\n': fputc(first,pfout); fputc('/',pfout); fputc('/',pfout); break; case EOF: fputc(first,pfout); *state = END_STATE ; break; default: fputc(first,pfout); break; } } void DoCPPConvert1(FILE *pfin,FILE * pfout,enum STATE * state) //若是cpp注释的话无需处理直接读取即可{ int first = 0; first = fgetc(pfin); switch(first) { case'\n': fputc(first,pfout); *state = NUL_STATE ; break; case EOF: fputc(first,pfout); *state = END_STATE ; break; default : fputc(first,pfout); break; } }
//测试区
void text1(){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);}CommentConvert1(pfin,pfout); printf("转换成功\n");fclose(pfin);//关闭两文件fclose(pfout);}
//cpp注释转化为c语言注释也同理函数并没有多大的变化
#ifndef __COMMENT_CONVERT_H__#define __COMMENT_CONVERT_H__#include<stdio.h>#include<stdlib.h>enum STATE {NUL_STATE, C_STATE, CPP_STATE, END_STATE};void CommentConvert2(FILE *pfin,FILE * pfout);void DoNULConvert2(FILE *pfin,FILE * pfout,enum STATE * state);void DoCConvert2(FILE *pfin,FILE * pfout,enum STATE * state);void DoCPPConvert2(FILE *pfin,FILE * pfout,enum STATE * state);#endif
//主函数
void CommentConvert2(FILE *pfin,FILE * pfout){enum STATE state =NUL_STATE; while(state != END_STATE) {switch(state){case NUL_STATE:{DoNULConvert2(pfin,pfout,&state);}break;case C_STATE:{DoCConvert2(pfin,pfout,&state);}break;case CPP_STATE: {DoCPPConvert2(pfin,pfout,&state);}break;default:break;}}}void DoNULConvert2(FILE *pfin,FILE * pfout,enum STATE * state){int first = 0;int second = 0;first = fgetc(pfin); switch( first){case '/':{second = fgetc(pfin); switch(second){case '*': {fputc(first,pfout); fputc(second,pfout);//*state = C_STATE; }break;case '/': {fputc('/',pfout); fputc('*',pfout);//*state = CPP_STATE; }break;default: {fputc(first,pfout); ungetc(second,pfin);}break;}}break;case EOF: {fputc(first,pfout); //*state = END_STATE; }break;default: {fputc(first,pfout); }break ;}} void DoCPPConvert2(FILE *pfin,FILE * pfout,enum STATE * state){int first = 0;int second = 0;int third = 0;first = fgetc(pfin);switch(first){case '\n' : {second = fgetc(pfin);switch(second){case '/':{third = fgetc(pfin);if(third =='*'){fputc('*',pfout);fputc('/',pfout);fputc(first,pfout);fputc(second,pfout);fputc(third,pfout);*state = C_STATE;}else if(third =='/'){fputc(first,pfout);}}break;case EOF:fputc('*',pfout);fputc('/',pfout);fputc(first,pfout);fputc(second,pfout);*state = END_STATE;break;default:fputc('*',pfout);fputc('/',pfout);fputc(first,pfout);fputc(second,pfout);*state = NUL_STATE;break;}}break;case '*':{second = fgetc(pfin);if(second == '/'){;}else{ungetc(second,pfin);fputc(first,pfout);}}break;default:fputc(first,pfout);break;}} void DoCConvert2(FILE *pfin,FILE * pfout,enum STATE * state){int first = 0;int second = 0;int third = 0;first = fgetc(pfin);switch(first) {case '*': {second = fgetc(pfin); switch(second){case '/': {fputc(first,pfout);fputc(second,pfout);*state = NUL_STATE;}break;default :{fputc(first,pfout);ungetc(second,pfin); }break; }}break;default:fputc(first,pfout); break;}}
//测试区
void text2(){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);}CommentConvert2(pfin,pfout);printf("转换成功\n");fclose(pfin);//关闭两文件fclose(pfout);}
1 0
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 扩展SpringMVC以支持更精准的数据绑定1
- 视频基础知识
- 蓝桥杯-奖券数目
- 二维数组中的for循环
- 扩展SpringMVC以支持绑定JSON格式的请求参数
- 注释转换
- 历届试题 小朋友排队(归并排序求逆序数)
- linux C语言 同一个文件被不同程序读写
- NI Vision for LabVIEW 基础(一):NI Vision 简介
- 第七章 注解式控制器的数据验证、类型转换及格式化--SpringMVC数据类型转换
- bzoj3673&3674 可持久化并查集
- Ubuntu12.04安装PuTTY
- 博为峰Java技术文章 ——JavaSE Swing使用数组方式创建列表框
- 设计模式笔记三:单例模式