注释转换(从c到c++)
来源:互联网 发布:adobe 2017mac百度云 编辑:程序博客网 时间:2024/05/14 22:32
要完成这个问题要考虑以下因素:
1. 换行问题
/* int i = 0; */int j = 0;/* int i = 0; */int j = 0;
2. /*与*/匹配问题
/*int i = 0;/*xxx*/
3. 多行注释问题
/*int i=0;int j = 0;int k = 0;*/int n = 0;
4. 连续注释问题
/**//**/
5. 连续**/问题
/*******/
以下为程序代码
1. 头文件
#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 DoConvert(FILE* pfIn, FILE* pfOut);//选择状态void DoNul_State(FILE* pfIn, FILE* pfOut);//无状态void DoC_State(FILE* pfIn, FILE* pfOut);//C状态void DoCpp_State(FILE* pfIn, FILE* pfOut);//CPP状态#endif
2. 源文件
#include "CommentConvert.h"enum STATE state = NUL_STATE;void DoConvert(FILE* pfIn, FILE* pfOut){while(state != END_STATE){switch(state){case NUL_STATE:DoNul_State(pfIn,pfOut);break;case C_STATE:DoC_State(pfIn,pfOut);break;case CPP_STATE:DoCpp_State(pfIn,pfOut);break;}}}void DoNul_State(FILE* pfIn, FILE* pfOut){int first = fgetc(pfIn);int second = 0;switch(first){case '/':second=fgetc(pfIn);switch(second){case '/':fputc(first, pfOut);fputc(second, pfOut);state = CPP_STATE;break;case '*':fputc(first, pfOut);fputc('/', pfOut);state =C_STATE;break;default:fputc(first, pfOut);fputc(second, pfOut);break;}break;case EOF:state = END_STATE;break;default:fputc(first, pfOut);break;}}void Check(FILE* pfIn, FILE* pfOut)//处理下一个字符并将指针返回当前位置{int check_n = fgetc(pfIn);if(check_n != '\n'){fputc('\n', pfOut);fseek(pfIn,-1,1);}elsefputc('\n', pfOut);}void DoC_State(FILE* pfIn, FILE* pfOut){int first = fgetc(pfIn);int second = 0;int third = 0;switch (first){case '\n':fputc('\n', pfOut);fputc('/', pfOut);fputc('/', pfOut);break;case '*':second = fgetc(pfIn);switch(second){third = fgetc(pfIn);case '/':{Check(pfIn,pfOut);state = NUL_STATE;}break;case '*':fputc(first, pfOut);while(1){third = fgetc(pfIn);if( '/' == third){Check(pfIn,pfOut);state = NUL_STATE;}break;if( '*' == third)fputc(second, pfOut);if( ( '/'!= third ) && ( '*' != third ) ){fputc(second, pfOut);fputc(third, pfOut);}third = fgetc(pfIn);}break;default:fputc(first, pfOut);fputc(second, pfOut);break;}break;default:fputc(first, pfOut);break;}}void DoCpp_State(FILE* pfIn, FILE* pfOut){int first = fgetc(pfIn);switch(first){case '\n':fputc(first, pfOut);state = NUL_STATE;break;case EOF:state = END_STATE;break;default :fputc(first, pfOut);break;}}
3.测试文件
#include "CommentConvert.h"void test(){FILE* pfIn = fopen("input.c","r");FILE* pfOut = NULL;if( NULL == pfIn){perror("open file for read");exit(EXIT_FAILURE);}pfOut = fopen("output.c","a");if( NULL == pfOut){perror("open file for w");fclose(pfIn);exit(EXIT_FAILURE);}DoConvert(pfIn,pfOut);fclose(pfIn);fclose(pfOut);}int main(){test();return 0;}
0 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到C++注释的转换
- C到CPP的注释转换
- 注释转换 (将C注释转换为C++注释)
- 注释转换(将C注释转换为C++注释)
- ThinkPhP中的模板常量替换机制
- mysql的储存过程
- C++中template(模版)的使用
- intellij idea 常用快捷键mac版
- servlet 与tomcat版本对照
- 注释转换(从c到c++)
- 如何查看windows系统端口号是否被占用
- 项目实战篇-餐馆管理系统—MFC,PHP,MySql:5.菜单管理模块
- Java表达式中的那些坑
- Makefile中用宏定义进行条件编译(gcc -D)/在Makefile中进行宏定义-D
- LeetCode 312. Burst Balloons(Hard)
- 在windows上部署使用Redis
- java总结1
- 微信小程序-template模板使用