有关注释转换de实现
来源:互联网 发布:mysql完全手册 编辑:程序博客网 时间:2024/06/05 00:21
注释转换用于文件中,将文件里面的C风格的注释,转换为CPP风格的注释。
C风格注释:/* ############ */
CPP风格注释://
本文将从以下方面入手,将所有的情况罗列如下:
从空文件到文件结束,罗列出的各种情况,从而有利于大家的学习。
下面给出文件中的各种情形:
下面将给出此次注释转换的代码,为了方便学习,将封装三个函数。
开始之时,将初始状态赋为空状态
**CommentConvert.h**
#define _CRT_SECURE_NO_WARNINGS 1#ifndef __COMMENTCONVERT_H__ //为了防止头文件的重引用#define __COMMENTCONVERT_H__#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>enum STATE{ NUL_STATE, C_STATE, CPP_STATE, END_STATE};void DoNULComment(FILE*pfIn, FILE*pfOut, enum STATE *p);//无注释时的处理void DoCComment(FILE*pfIn, FILE*pfOut, enum STATE *p);//C注释的处理void DoCPPComment(FILE*pfIn, FILE*pfOut, enum STATE *p);//CPP的注释处理#endif //__COMMENTCONVERT_H__
CommentConvert.c
#define _CRT_SECURE_NO_WARNINGS 1#include "CommentConvert.h"void DoNULComment(FILE*pfIn, FILE*pfOut, enum STATE *p)//无注释时的处理{ int first = 0; first = fgetc(pfIn); switch (first) { case '/': { int second = 0; second = fgetc(pfIn); switch (second) { case '/': //处理CPP情况 { fputc(first, pfOut); fputc(second, pfOut); *p = CPP_STATE;//回到CPP的状态 } break; case '*': // 处理C状况 { fputc('/', pfOut); fputc('/', pfOut); *p = C_STATE;//回到C的状态 } break; default: fputc(first, pfOut); fputc(second, pfOut); break; } } break; case EOF: fputc(first, pfOut); *p = END_STATE; break; default: fputc(first, pfOut); break; }}void DoCComment(FILE *pfIn, FILE *pfOut, enum STATE *p){ int first = 0; first = fgetc(pfIn); switch (first) { case '*': { int second = 0; second = fgetc(pfIn); switch (second) { case'/'://C注释完毕 { int third = fgetc(pfIn);//判断是否有换行 if (third == '\n') { fputc(third, pfOut); *p = NUL_STATE; } else { fputc('\n', pfOut); ungetc(third, pfIn); *p = NUL_STATE; } break; } case'*'://(second)中 ungetc(second, pfIn);//如果接下来仍然是*,则将*返回给pfIn中 fputc(second, pfOut); break; default: fputc(first, pfOut); fputc(second, pfOut); break; } } break; case'/': //first中 { /* int second = 0; second = fgetc(pfIn); switch (second) { case'/': { fputc(first, pfOut); fputc(second, pfOut); *p = CPP_STATE; } break; default: ungetc(second, pfIn); fputc(first, pfOut); fputc(second, pfOut); break; }*/ } *p = NUL_STATE; break; case '\n': { //int second = fgetc(pfIn);//可以没有 ////fputc(second, pfOut); //if (second == '*') //{ // ungetc('*', pfIn); //} //else //{ // fputc('/', pfOut); // fputc('/', pfOut); //} fputc(first, pfOut);//连续注释时,在每行的开头加上CPP注释风格 fputc('/', pfOut); fputc('/', pfOut); } break; default: fputc(first, pfOut); break; }}void DoCPPComment(FILE*pfIn, FILE*pfOut, enum STATE *p)//CPP的注释处理{ int first = 0; first = fgetc(pfIn); switch (first) { case '\n': fputc('\n', pfOut); *p = NUL_STATE; break; case EOF: *p = END_STATE; break; default: putc(first, pfOut); break; }}
**test.c**
#define _CRT_SECURE_NO_WARNINGS 1#include "CommentConvert.h"void CommentConvert(FILE*pfIn, FILE*pfOut){ enum STATE s = NUL_STATE; while (s != END_STATE) { switch (s) { case NUL_STATE: DoNULComment(pfIn, pfOut, &s);//传递状态以及文件 break; case C_STATE: DoCComment(pfIn, pfOut, &s); break; case CPP_STATE: DoCPPComment(pfIn, pfOut, &s); break; default: break; } }}void test(){ FILE *pfIn = NULL; FILE *pfOut = NULL; pfIn = fopen("Input.c.txt", "r");//以只读的形式打开 if (pfIn == NULL) { perror("use fopen of Input"); exit(EXIT_FAILURE); } pfOut = fopen("output.c.txt", "w"); if (pfOut == NULL) { perror("use fopen of pfOut"); fclose(pfIn); exit(EXIT_FAILURE); } CommentConvert(pfIn, pfOut); fclose(pfIn); fclose(pfOut);}int main(){ test(); system("pause"); return 0;}
了解注释转换,对文件的学习有很大的帮助,希望这些可以帮助到大家。
阅读全文
0 0
- 有关注释转换de实现
- 有关c++de笔试
- 有关注释
- 注释转换项目精益版实现
- C语言实现注释转换
- 实现c语言注释转换为c++注释
- 漂亮的LinuxC注释转换器--(1)实现注释转换
- 【C语言】注释转换项目实现
- C->C++注释转换的简单实现
- C语言实现注释行转换
- 有关doxygen注释
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- 注释转换
- kombu消息框架<二>
- leetcode 137. Single Number II
- 用python简单处理图片(1):打开\显示\保存图像
- vxlearn
- [leetcode]29. Divide Two Integers@Java解题报告
- 有关注释转换de实现
- 可视化数据分析软件Tableau-简单说
- hdu1234 开门人和关门人
- 设计模式之禅笔记-6大设计原则(下)
- ubuntu16.04 vps搭建vpn
- Linux系列—iptables/netfilter命令参数详解中文手册
- FFMPEG学习【libswscale】
- Spring任务调度之quartz
- 使用TextInputLayout