注释转换
来源:互联网 发布:面码仁太 知乎 编辑:程序博客网 时间:2024/06/05 04:22
c和c++中的注释有几下几种情况:
// 1.一般情况/* 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*/
我们的任务是将c的注释转换为c++的注释,c++的注释转换为c的注释。下面来看程序,为了使程序更加有条理性,我自定义了头文件,将测试函数与头文件分开。
头文件部分:
#ifndef __COMMENTCONVERT_H__#define __COMMENTCONVERT_H__#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <stdlib.h>#define INPUT "input.c"#define OUTPUT "output.c"enum state//存放4种状态{ NULL_State, C_State, CPP_State, END_State};void CommentConvert(FILE *pfin, FILE *pfout);void Do_NULL_State(FILE *pfin, FILE *pfout, enum state *sta);void Do_C_State(FILE *pfin, FILE *pfout, enum state *sta);void Do_CPP_State(FILE *pfin, FILE *pfout, enum state *sta);#endif
函数实现部分:
#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <stdlib.h>#include "CommentConvert.h"void Do_NULL_State(FILE *pfin, FILE *pfout, enum state *sta){ int first = 0; int second = 0; first = fgetc(pfin);//从文件中读取第一个字符 switch (first) { case'/': { second = fgetc(pfin); //从文件中读取第二个字符 switch (second) { case'*': fputc('/', pfout); fputc('/', pfout); *sta = C_State;//转c注释 break; case'/': fputc('/', pfout); fputc('*', pfout); *sta = CPP_State;//转c++注释 break; default: fputc(first, pfout); fputc(second, pfout); break; } } break; case EOF: fputc(first, pfout); *sta = END_State; break; default: fputc(first, pfout); break; }}void Do_C_State(FILE *pfin, FILE *pfout, enum state *sta){ int first = 0; int second = 0; int third = 0; first = fgetc(pfin); switch (first) { case '*': { second = fgetc(pfin); switch (second) { case '*': { third = fgetc(pfin); if (third=='/') fputc(first, pfout); *sta = NULL_State; } break; case'/': { third = fgetc(pfin); *sta = NULL_State; if (third == '\n') { fputc(third, pfout); } else if (third=='/') { int forth = fgetc(pfin); if (forth == '*') { fputc('\n', pfout); fputc(third, pfout); fputc('/', pfout); *sta = C_State; } } else { fputc('\n', pfout); fputc(third, pfout); } } break; default: { fputc(first,pfout); fputc(second, pfout); } break; } } break; case '\n': { second = fgetc(pfin); switch (second) { case'*': { third = fgetc(pfin); if (third == '/') { fputc('\n', pfout); *sta = NULL_State; } else { fputc('/', pfout); fputc('/', pfout); fputc(second, pfout); fputc(third, pfout); } } break; default: { fputc('\n', pfout); fputc('/', pfout); fputc('/', pfout); fputc(second, pfout); } break; } } break; default: fputc(first, pfout); break; }} void Do_CPP_State(FILE *pfin, FILE *pfout, enum state *sta){ int first = 0; first = fgetc(pfin); switch (first) { case '\n': fputc(first, pfout); *sta = NULL_State; break; default: fputc(first, pfout); break; }}void CommentConvert(FILE *pfin, FILE *pfout){ enum state sta = NULL_State; while (sta != END_State) { switch (sta) { case NULL_State: Do_NULL_State(pfin, pfout, &sta); break; case C_State: Do_C_State(pfin, pfout, &sta); break; case CPP_State: Do_CPP_State(pfin, pfout, &sta); break; case END_State: break; default: break; } } printf("转换成功!\n"); fclose(pfin); fclose(pfout);}
函数的测试部分:
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include "CommentConvert.h"int main(){ FILE *pfin = NULL; FILE *pfout = NULL; pfin = fopen(INPUT, "r"); if (pfin == NULL) { perror("not open the file"); exit(EXIT_FAILURE); } pfout = fopen(OUTPUT, "w"); if (pfout == NULL) { perror("not open the file"); fclose(pfin); exit(EXIT_FAILURE); } CommentConvert(pfin, pfout); system("pause"); return 0;}
最后我们到文件中看一下结果:
/* 1.一般情况// 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
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 51nodoj 1240(莫比乌斯函数)
- 博客迁移至 GitHub Pages https://mummyding.github.io/
- hql与sql的区别
- 华为 6
- 微信分享 "Reference error wx is not defined"错误
- 注释转换
- modalEffects模态框js打开
- Xcode 生成静态包.a文件
- The capture session could not be initiated (failed to set hardware filter to promiscuous mode).
- hadoop yarn配置错误修正
- TFTLCD字符缺失错位的问题发现及解决
- 二叉搜索书的第K个节点
- Android 页面切换时抖动问题
- Android ---Application 开发中共享全局数据