c语言注释和代码互换,c语言项目—注释转换(c——c++)

题目要求:

要将全部的c语言风格的注释转换为c++风格的注释,如下图所示,需要将input.c文件经过注释转换程序转换为output.c文件所示。

这是测试结果:

07565fd9a99a1f72f4235faf6f6b4c25.png

首先我们来分析一下这个题目,在做这个项目时,我们需要引进有限状态机这个概念。那我们先来了解一下什么是有限状态机。

有限状态机FSM是软件上一种常用的处理方法,他把复杂的控制逻辑分成有限个稳定状态,在每个状态上进行处理。

我们来画一下状态图:

d9c39a5485185959708c12ef91e66c15.png所以我们把这个项目分成这几个状态。NUL_STATE, C_STATE,  CPP_STATE,  EMD_STATE

现在我们来实现一下这个项目。

"CommentConvert.h"#ifndef  __COMMENT_CONVERT_H__

#define  __COMMENT_CONVERT_H__

#include

#include

#define INPUTFILENAME "input.c"

#define OUTPUTFILENAME "output.c"

enum STATE

{

NUL_STATE,

C_STATE,

CPP_STATE,

EMD_STATE

};

void CommentConvert(FILE *pRead,FILE *pWrite);

void do_nul_state(FILE *pRead,FILE *pWrite);

void do_c_state(FILE *pRead,FILE *pWrite);

void do_cpp_state(FILE *pRead,FILE *pWrite);

#endif //__COMMENT_CONVERT_H__

"CommentConvert.c"#include"CommentConvert.h"

enum STATE state;

void CommentConvert(FILE *pRead,FILE *pWrite)

{

while(state!=EMD_STATE)

{

switch(state)

{

case NUL_STATE:

do_nul_state(pRead,pWrite);

break;

case C_STATE:

do_c_state(pRead,pWrite);

break;

case CPP_STATE:

do_cpp_state(pRead,pWrite);

break;

case EMD_STATE:

break;

}

}

}

void do_nul_state(FILE *pRead,FILE *pWrite)

{

int first=0;

int second=0;

first = fgetc(pRead);

switch(first)

{

case '/':

{

second=fgetc(pRead);

if(second=='*')

{

fputc('/',pWrite);

fputc('/',pWrite);

state=C_STATE;

}

else if(second=='/')

{

fputc(first,pWrite);

fputc(second,pWrite);

state=CPP_STATE;

}

else

{

fputc(first,pWrite);

fputc(second,pWrite);

}

}

break;

case EOF:

state=EMD_STATE;

break;

default:

fputc(first,pWrite);

break;

}

}

void do_c_state(FILE *pRead,FILE *pWrite)

{

int first=0;

int second=0;

int third=0;

first = fgetc(pRead);

switch(first)

{

case '*':

{

second=fgetc(pRead);

switch(second)

{

case '/':

third=fgetc(pRead);

if(third!='\n')

{

fputc('\n',pWrite);

//fputc('/',pWrite);

//fputc('/',pWrite);

state=CPP_STATE;

}

if(third=='/')

{

ungetc(third,pRead);

state=NUL_STATE;

break;

}

else

{

fputc(third,pWrite);

state=NUL_STATE;

break;

}

case'*':

third=fgetc(pRead);

fputc(first,pWrite);

if(third=='/')

{

state=NUL_STATE;

}

break;

default:

fputc(first,pWrite);

fputc(second,pWrite);

break;

}

break;

case'\n':

fputc(first,pWrite);

fputc('/',pWrite);

fputc('/',pWrite);

break;

case EOF:

state=EMD_STATE;

break;

default:

fputc(first,pWrite);

break;

}

}

}

void do_cpp_state(FILE *pRead,FILE *pWrite)

{

int first=0;

first = fgetc(pRead);

switch(first)

{

case '\n':

{

fputc(first,pWrite);

//fputc('/',pWrite);

//fputc('/',pWrite);

state=NUL_STATE;

}

break;

case EOF:

state=EMD_STATE;

break;

default:

fputc(first,pWrite);

break;

}

}

“test.c”#include"CommentConvert.h"

int main()

{

FILE *pRead = NULL;

FILE *pWrite = NULL;

printf("注释转换开始:");

pRead=fopen(INPUTFILENAME,"r");

if(NULL ==pRead)

{

perror("open file for read\n");

exit(EXIT_FAILURE);

}

pWrite=fopen(OUTPUTFILENAME,"w");

if(NULL ==pWrite)

{

fclose(pRead);

perror("open file for write\n");

exit(EXIT_FAILURE);

}

CommentConvert(pRead,pWrite);

printf("注释转换完成:");

return 0;

}

这样就完成了注释转换项目。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值