注释转换—将C语言注释风格转换为C++注释风格
来源:互联网 发布:计算机前沿技术大数据 编辑:程序博客网 时间:2024/06/06 19:27
让我们来看一下具体转换要求
1.C语言风格的注释/* */转换为C++风格 //
2.// 风格的注释保持原样
3.所有的转换需要符合语法规则
4.注释转换需要支持注释嵌套
下面给出一些需要转换的情况(比较全面)当然如果读者还分有情况,欢迎留言一起学习
input.c
// 1.一般情况int num = 0;/* 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;// 5.连续注释问题/*a*//*b*/// 6.连续的**/问题/***/// 7.C++注释问题// /*xxxxxxxxxxxx*/
下面来看一下实现的代码
头文件CommentConvert.h
#define _CRT_SECURE_NO_WARNINGS 1#ifndef __COMMENT_CONVERT_H__#define __COMMENT_CONVERT_H__#include <stdio.h>#include <stdlib.h>enum STATE{ NUL_STATE,//无状态 C_STATE, //c状态 CPP_STATE,//c++状态 END_STATE //结束状态};void DoNulState(FILE *pfIn, FILE *pfOut, enum STATE *s);void DoCState(FILE *pfIn, FILE *pfOut, enum STATE *s);void DoCppState(FILE *pfIn, FILE *pfOut, enum STATE *s);void DoComment(FILE *pfIn, FILE *pfOut);#endif //__COMMENT_CONVERT_H__
函数实现CommentConvert.c
#include "commentconvert.h"//无状态void DoNulState(FILE*pfIn, FILE*pfOut, enum STATE* s){ int first = 0; int second = 0; first = fgetc(pfIn); switch (first) { case'/': { second = fgetc(pfIn); switch (second) { case'*': //进入C状态 fputc(first, pfOut); fputc('/', pfOut); *s = C_STATE; break; case'/': //进入C++状态 fputc(first, pfOut); fputc(second, pfOut); *s = CPP_STATE; break; default: fputc(first, pfOut); fputc(second, pfOut); break; } break; } case EOF: *s = END_STATE; break; default: fputc(first, pfOut); break; }}//C状态void DoCState(FILE *pfIn, FILE *pfOut, enum STATE *s) { int first = 0; int second = 0; int third = 0; first = fgetc(pfIn); switch (first) { case'\n': //换行 fputc(first, pfOut); fputc('/', pfOut); fputc('/', pfOut); break; case'*': //C有可能会结束 { second = fgetc(pfIn); switch (second) { case'/': //C状态结束 { *s = NUL_STATE; third = fgetc(pfIn); switch (third) { case'\n': fputc(third, pfOut); break; case'/': ungetc(third, pfIn); fputc('\n', pfOut); break; default: fputc('\n', pfOut); fputc(third, pfOut); } } break; case'*': //C有可能会结束 fputc(second, pfOut); ungetc(second,pfIn); break; default: fputc(first, pfOut); fputc(second, pfOut); break; } break; } case EOF: *s = END_STATE; break; default: fputc(first, pfOut); break; }}//C++状态void DoCppState(FILE *pfIn, FILE *pfOut, enum STATE *s) { 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; }}void DoComment(FILE*pfIn, FILE*pfOut, enum STATE* s){ 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; default: break; } }}
测试 test.c
#include "commentconvert.h"void test(){ FILE *pfIn = NULL; FILE *pfOut = NULL; pfIn = fopen("input.c.txt", "r"); if (pfIn == NULL) { perror("open file"); exit(EXIT_FAILURE); } pfOut = fopen("output.c.txt", "w"); if (pfOut == NULL) { perror("open file"); fclose(pfIn); exit(EXIT_FAILURE); } DoComment(pfIn, pfOut); fclose(pfIn); fclose(pfOut);}int main(){ test(); system("pause"); return 0;}
将因为这个实现简单,所以不做多的解释,读者可自行学习
阅读全文
0 0
- 注释转换—将C语言注释风格转换为C++注释风格
- 注视转换 将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++语言注释
- Android AM命令行启动程序的方法
- linux脚本明明定义了变量,但是引用的时候报错(原因:shell定义变量的时候,“等号”两边不要加空格)
- 欣的无线轮播!
- 创建一个用于上传文件的表单
- 指针和数组的区别
- 注释转换—将C语言注释风格转换为C++注释风格
- 【自考】数据结构之思维导图
- 4484: [Jsoi2015]最小表示
- Java4Android笔记之Java中的面向对象基础(四)
- 树莓派内核升级的三种方式
- Spring Boot
- traces.txt文件信息
- Oracle创建表空间、创建用户以及授权
- JS call()方法和apply()方法