注释转换

来源:互联网 发布:wind资讯软件怎么样 编辑:程序博客网 时间:2024/05/29 17:10

编写一个小项目将一个一个文件中的注释都转换成C++的注释风格

设计部分:

(1)头文件模块:包括模块中需要引用的头文件定义,需要实现的主要函数的声明

(2)头文件中主要函数模块的实现:各个函数部分实现的细节

(3)测试函数:检验函数模块的功能

(4)写入一个输入文件

(5)运行结果记入一个输出文件中

////原始输入部分(input.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*/

//头文件模块#ifndef __COMMENTCONVERT_H__#define __COMMENTCONVERT_H__#include <stdio.h>#include <stdlib.h>#define INPUT "input.c"#define OUTPUT "output.c"enum KIND//定义一个枚举常量来表示要执行的选项的操作{    END_START,    NULL_START,    C_START,    Cpp_START,};void CommentConvert(FILE *pfin, FILE *pfout);//注释转换操作函数void DoNullState(FILE *pfin, FILE *pfout,enum KIND *sta);//普通字符转换函数void DoCState(FILE *pfin, FILE *pfout,enum KIND *sta);//c语言注释转换为c++注释函数void DoCppState(FILE *pfin, FILE *pfout,enum KIND *sta);//c++注释转换函数#endif//__COMMENTCONVERT_H__


#define _CRT_SECURE_NO_WARNINGS 1//函数具体功能实现模块实现#include"CommentConvert.h"void DoNullState(FILE *pfin, FILE *pfout,enum KIND *sta)//普通字符转换函数{int first=0;int second=0;first=fgetc(pfin);switch(first){case '/':{fputc(first,pfout);second = fgetc(pfin);switch(second){case '/'://如果是//将second输出,进入c++注释部分fputc(second,pfout);*sta = Cpp_START;break;case '*'://如果是/*就将*改为/输出,进入c注释部分fputc('/',pfout);*sta = C_START;break;default:fputc(second,pfout);break;}break;case EOF://文件结束fputc(first,pfout);*sta=END_START;break;default://其他字符fputc(first,pfout);break;}}}void DoCState(FILE *pfin, FILE *pfout,enum KIND *sta)//c语言注释转换为c++注释函数{int first = 0;int second = 0;first=fgetc(pfin);switch(first){case '/':fputc(first,pfout);break;case '*':{second=fgetc(pfin);switch(second){case '*':fputc(first,pfout);ungetc(second,pfout);//将*之后的内容放到缓存区break;case '/':{int third=fgetc(pfin);*sta=NULL_START;if(third == '\n')//判断注释之后是否需要主动换行的情况{fputc('\n',pfout);}else{fputc('\n',pfout);ungetc(third,pfin);}}break;default:fputc(first,pfout);fputc(second,pfout);break;}}break;case '\n':second=fgetc(pfin);switch(second){case '*':{int third=fgetc(pfin);if(third == '/'){fputc('\n',pfout);*sta = NULL_START;}else{fputc('/',pfout);fputc('/',pfout);fputc(second,pfout);fputc(third,pfout);}break;}default:fputc('\n',pfout);fputc('/',pfout);fputc('/',pfout);ungetc(second,pfin);break;}break;default:fputc(first,pfout);break;}}void DoCppState(FILE *pfin, FILE *pfout,enum KIND *sta)//c++注释转换函数{    int first = 0;    first = fgetc(pfin);    switch(first)    {    case '\n':        fputc(first,pfout);        *sta = NULL_START;        break;    default:        fputc(first,pfout);        break;    }}void CommentConvert(FILE *pfin, FILE *pfout)//注释转换操作函数{int input=0;int output=0;enum KIND str = NULL_START;while(str!=END_START){switch(str){case NULL_START:DoNullState(pfin, pfout, &str);break;case C_START:DoCState(pfin, pfout, &str);break;case Cpp_START:            DoCppState(pfin, pfout, &str);//c++注释转换函数            break;        case END_START:            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 *pfout = NULL;    FILE *pfin = NULL;    pfin = fopen(INPUT,"r");//以读的形式打开文件    if(pfin == NULL)    {        perror("not open file");        exit(EXIT_FAILURE);    }    pfout=fopen(OUTPUT,"w");//写入文件    if(pfout == NULL)    {        perror("not open file");        fclose(pfin);        exit(EXIT_FAILURE);    }    CommentConvert(pfin,pfout);//注释转换操作函数    system("pause");    return 0;}

//转换成功部分(outpu.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






0 0
原创粉丝点击