注释转换
来源:互联网 发布:淘宝联盟怎么一起结算 编辑:程序博客网 时间:2024/06/06 06:40
注释转换:本文将C语言注释转换为C++注释;
C语言注释风格:一次可以注释多行
/* …………………………….. */
C++注释风格:一次只能注释一行
//………………………..
C注释到C++转换转换关系如图所示:
注意:C状态不会直接到EOF
目的:将下列代码转换为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.连续注释问题/**//**/// 6.连续的**/问题/***/// 7.C++注释问题// /*xxxxxxxxxxxx*/
//头文件Commentcovert.h#define _CRT_SECURE_NO_WARNINGS 1#ifndef __CommentCovert_H__#define __CommentCovert_H__#include<stdio.h>#include<stdlib.h>typedef enum STATE //定义一个枚举类型{ NULL_state, //空状态 C_state, //C状态 CPP_state, //C++状态 END_state //结束状态}STATE;void DoNullState(FILE *pFIn, FILE *pFOut); //处理空状态void DoCState(FILE *pFIn, FILE *pFOut); //处理C状态void DoCppState(FILE *pFIn, FILE *pFOut); //处理C++状态void DoCovertWork(FILE *pFIn, FILE *pFOut); //执行转换函数#endif
//实现函数Commentcovert.c#define _CRT_SECURE_NO_WARNINGS 1#include"Commentcovert.h"char first = 0;char second = 0;char third = 0;STATE state = NULL_state; //定义开始状态为空void DoCovertWork(FILE *pFIn, FILE *pFOut){ state = NULL_state; while (state != END_state) { switch (state) { case NULL_state: DoNullState(pFIn,pFOut); break; case C_state: DoCState(pFIn, pFOut); break; case CPP_state: DoCppState(pFIn,pFOut); break; default: break; } }}void DoNullState(FILE *pFIn, FILE *pFOut){ first = fgetc(pFIn); switch (first) { case '/': { second = fgetc(pFIn); switch (second) { case '*': //进入C状态 fputc(first, pFOut); fputc('/', pFOut); state = C_state; break; case '/': //进入C++状态 fputc(first, pFOut); fputc(second, pFOut); state = CPP_state; break; default: fputc(first, pFOut); fputc(second, pFOut); break; } } break; case EOF: state = END_state; break; default: fputc(first, pFOut); break; }}void DoCppState(FILE *pFIn, FILE *pFOut){ first = fgetc(pFIn); switch (first) { case '\n': //C++状态遇到\n转换为空状态 fputc(first, pFOut); state = NULL_state; break; case EOF: state = END_state; break; default: fputc(first, pFOut); break; }}void DoCState(FILE *pFIn, FILE *pFOut){ first = fgetc(pFIn); switch (first) { case '*': { second = fgetc(pFIn); switch (second) { case '/': //C状态遇到*/转换为空状态 { third = fgetc(pFIn); if (third != '\n') { fputc('\n', pFOut); } if (third == '/') { ungetc(third, pFIn); // 遇到连续注释/**//**/这种问题 state = NULL_state; // 需要将 /重新写到input中 break; } fputc(third, pFOut); state = NULL_state; } break; case '*': { fputc(first, pFOut); //遇到连续的/***/问题 third = fgetc(pFIn); // 需要将 *重新写到output中 if ('/' == third) state = NULL_state; } break; default: fputc(first, pFOut); fputc(second, pFOut); break; } } break; case '\n': fputc(first, pFOut); fputc('/', pFOut); fputc('/', pFOut); break; case EOF: state = END_state; break; default: fputc(first, pFOut); break; }}
//测试文件test.c#define _CRT_SECURE_NO_WARNINGS 1#include"Commentcovert.h";int main(){ FILE *pFIn = NULL; FILE *pFOut = NULL; pFIn = fopen("input.txt", "r");//打开 读取 的文件 if (pFIn == NULL) { perror("读取文件失败!!!"); exit(EXIT_FAILURE); } pFOut = fopen("output.txt", "w"); //打开 要写入 的文件 if (pFOut == NULL) { perror("写入文件失败!!!"); fclose(pFIn); //写入文件失败记得关闭打开文件 exit(EXIT_FAILURE); } DoCovertWork(pFIn,pFOut); //执行转换函数 fclose(pFIn); fclose(pFOut); system("pause"); return 0;}
程序执行后output:
// 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.连续注释问题////// 6.连续的**/问题//*// 7.C++注释问题// /*xxxxxxxxxxxx*/
0 0
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 什么是 SNMP 和 MIB
- 401. Binary Watch
- struts 2访问web元素
- Android中接口的使用及类使用
- Unsafe与CAS
- 注释转换
- 使用Git管理代码
- 微信小程序官方文档请求接口调用报错
- MySQL 输入中文数据
- BZOJ 3277&&3473 广义后缀自动机
- 2016蓝桥杯C/C++省赛 剪邮票(深搜DFS+暴力)
- jimu Mirror的使用(android快速手机预览xml界面)
- CPA、CPS、CPM、CPT、CPC 是什么
- 114. Flatten Binary Tree to Linked List(unsolved)