IO注释转换---CPP风格
来源:互联网 发布:听书神器软件 编辑:程序博客网 时间:2024/06/01 10:09
头文件 convert.h#ifndef __CONVERT_H_#define __CONVERT_H_#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <windows.h>#endif //__CONVERT_H_enum{ CSTATUS, CPPSTATUS, NULLSTATUS,EOFSTATUS };#define INPUT "input.txt"#define OUTPUT "output.txt"void convert_work();void do_CPP(FILE*opt, FILE*ipt);void do_C(FILE*opt, FILE*ipt);void do_NULL(FILE*opt, FILE*ipt);测试 test.c#include "convert.h"int main(){convert_work();system("pause");return 0;}实现 convert.c#include "convert.h"int status = NULLSTATUS; //定义全局状态变量void do_NULL(FILE*opt, FILE*ipt) //空状态{int s = fgetc(opt); //在opt中读入一个字符switch (s){case '/':{int f = fgetc(opt);switch (f){case'/':fputc('/', ipt); //如果遇到//将输出并进入CPP状态fputc('/', ipt);status = CPPSTATUS;break;case'*':fputc('/', ipt); //遇到/*发生注释转换//进入C状态fputc('/', ipt);status = CSTATUS; break;case EOF:status = EOFSTATUS; break;//遇到EOF进入EOF状态default:fputc('/', ipt);//遇到a/b类似的情况,先输出/{if (f != '\n')//若/后面不为\n,输出\后的内容fputc(f, ipt);else //若为\n直接换行fputc('\n', ipt);}; break;}}break;case EOF:status = EOFSTATUS; break;default:fputc(s, ipt); break; //以上均不满足直接写入ipt}}void do_C(FILE*opt, FILE*ipt) //C状态{int c = fgetc(opt);switch (c){case'*':{int s = fgetc(opt);switch (s){case '/': //若为*/{int a = fgetc(opt); //再获取一个字符判断是否为\nif (a != '\n') //不为\n后面仍有内容{fputc('\n', ipt); //换行.退回获取的字符ungetc(a, opt);}elsefputc('\n',ipt); //*/后为\n直接换行status = NULLSTATUS; //遇到*/之后的内容不是C状态}; break; case EOF:status = EOFSTATUS; break; default:fputc('*', ipt); ungetc(s, opt); status = CSTATUS; break;}}break;case'\n':fputc('\n', ipt); fputc('/', ipt); fputc('/', ipt); status = CSTATUS; break; //在C注释中遇到换行,换行并加//注释case EOF:status = EOFSTATUS; break;default:fputc(c, ipt); status = CSTATUS; break; //没有遇到*/均在C状态}}void do_CPP(FILE*opt, FILE*ipt) //C++状态{int s = fgetc(opt);switch (s){case '\n':fputc('\n', ipt); status = NULLSTATUS; break; //换行即结束注释case EOF:status = EOFSTATUS; break;default:fputc(s, ipt); break;}}void convert(FILE* opt, FILE * ipt){while (status != EOFSTATUS){switch (status) //4种状态{case NULLSTATUS:do_NULL(opt, ipt);break;case CSTATUS:do_C(opt, ipt);break;case CPPSTATUS:do_CPP(opt, ipt);break;case EOFSTATUS: //EOF状态直接退出break;default: break;}}}void convert_work(){FILE* opt = fopen(INPUT, "r"); //以读方式打开FILE* ipt = fopen(OUTPUT, "w"); //以写方式打开if (opt == NULL||ipt==NULL){printf("fopen error!\n");}convert(opt, ipt);fclose(opt);opt = NULL;fclose(ipt);ipt = NULL;}
看一下程序运行结果:
阅读全文
0 0
- IO注释转换---CPP风格
- 将c风格的注释转换成cpp风格
- C和CPP注释转换
- 注释转换(C注释风格-C++注释风格)
- c注释转换为cpp注释
- C注释转换至CPP注释
- 注释转换(c风格转为c++风格)
- 【小项目】注释风格转换(从C语言注释风格转换到C++注释风格)
- 注视转换 将C风格注释转换为C++风格
- c的注释转换成cpp
- C到CPP的注释转换
- 注释转换—将C语言注释风格转换为C++注释风格
- C语言项目:注释转换(C风格注释转换成C++风格注释)
- C语言编写注释风格转换
- 把c语言注释转换为cpp注释
- 注释转换(c++风格转c风格)
- C\C++注释风格转换(段注释转换为行注释)
- 注释转换(将C的注释风格转换为C++的)
- (转)JS日期转换为指定格式字符串
- Python数据抓取(1) —数据处理前的准备
- Linux中内部命令和外部命令
- 第一篇博客
- 关于java中属性默认值问题
- IO注释转换---CPP风格
- SQL入门 6 管理数据库事务
- caffe之python接口实战 :net_surgery 官方教程源码解析
- Linux中内部命令和外部命令
- 欢迎使用CSDN-markdown编辑器
- 面经
- 稳压电源 连载3:一般直流电源部分-整流器.
- .bash_profile和.bashrc的区别(如何设置生效)
- 二维码的生成与识别(小白)