题目要求:

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

这是测试结果:

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

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

我们来画一下状态图:

所以我们把这个项目分成这几个状态。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;

}

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

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

  1. 贪吃蛇的c语言程序码,C语言贪吃蛇代码下载_C语言贪吃蛇代码官方下载-太平洋下载中心...

    C语言编写贪吃蛇源代码,简单易懂,文件为VC源代码.如果你正在学习c语言,就来下载吧.很经典的. C语言贪吃蛇代码原理: 产生一个固定大小没有边界的游戏区域,蛇从区域的中心开始,由玩家通过键盘控制蛇的 ...

  2. vue怎么注释html代码,vue文件中如何注释?

    vue文件里是可以写注释的.在每个代码块内,注释的时候,需要使用各自语言的注释语法去注释(HTML.CSS.JavaScript.Jade 等).在文件最顶部注释的时候用HTML的注释语法: . ht ...

  3. c语言常用的代码,初学C语言常用简单程序代码;

    <初学C语言常用简单程序代码;>由会员分享,可在线阅读,更多相关<初学C语言常用简单程序代码;(16页珍藏版)>请在人人文库网上搜索. 1.初学C语言常用简单程序代码素数的筛选 ...

  4. c语言文件可用代码存放,C语言 文件(示例代码)

    小白一个,看到有错误,希望指出,万分感谢 /**************************************************************** C语言文件概述: 一般文件 ...

  5. c语言地图导航代码大全,C语言实训—电子地图导航系统源代码.docx

    C语言实训-电子地图导航系统源代码 /********************************************************************************* ...

  6. c语言动态图形代码 叮当猫,C语言制作图形马赛克处理技术,网友:这小子不进腾讯可惜了!-Go语言中文社区...

    C语言制作图形马赛克处理技术,网友:这小子不进腾讯可惜了! 每个人都有讨厌的人,例如我就比较讨厌三个姓马的人,马云.马化腾和马赛克.马云骗女人的钱,马化腾骗孩子的钱,马赛克阻挡了人们的分享和交流 .那 ...

  7. 怎么用c语言写情书代码,用C语言写的情书

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include class MY //定义一个"MY"的类 { private: char ti ...

  8. c语言作业迷宫代码,用c语言实现迷宫求解完美源代码

    <用c语言实现迷宫求解完美源代码>由会员分享,可在线阅读,更多相关<用c语言实现迷宫求解完美源代码(7页珍藏版)>请在人人文库网上搜索. 1.include #include ...

  9. 猴子选王c语言链表程序代码,数据结构(C语言)用栈和链表编写猴子选大王程序...

    <数据结构(C语言)用栈和链表编写猴子选大王程序>由会员分享,可在线阅读,更多相关<数据结构(C语言)用栈和链表编写猴子选大王程序(3页珍藏版)>请在人人文库网上搜索. 1.i ...

最新文章

  1. ELK 5.x日志分析 (二) Elasticserach 5.2 安装
  2. java表或视图不存在_Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在...
  3. 国内35所人工智能学院大盘点
  4. 保护可执行程序的一种方法
  5. HTML5 CSS选择器总结(强烈推荐)
  6. linux下怎么监控网络 io swap,监控io性能,free命令,ps命令,查看网络状态,linux下抓包...
  7. DefenseCode ThunderScan 静态代码审计工具
  8. Latex 合并pdf文档
  9. python中pass语句学习
  10. 看《一人之下:陈朵篇》——架空世界里的真实
  11. Excel 2010高级应用-面积图(三)
  12. 宠物商店业务逻辑关系模型图
  13. 14.嵌入式控制器EC实战 SMBus读取电池信息并控制充放电
  14. 网站内容采集工具介绍
  15. Java大牛呕心沥血经历——技术面试与HR谈薪资技巧
  16. Maya Mental Ray焦散效果
  17. uCOSIII移植stm32c8t6
  18. 如何使用IxNetwork软件进行Avnu gPTP一致性测试?
  19. 微信小程序05---WebSocket的使用
  20. Linux下运行robot,Robot Framework-Unix和Linux安装

热门文章

  1. java 求向量的均值,标准数组——向量
  2. 基于JAVA+SpringMVC+MYSQL的医院分诊挂号管理系统
  3. DateTime 格式相比较,timestampdiff() 函数的运用
  4. Innobackupx工具命令简单解析
  5. mui封装的ajax请求
  6. 1-算法-hanoi汉诺塔问题- 递归
  7. Python之网络编程(粘包、粘包解决方案)
  8. eclipse终止端处的加载主类错误
  9. 计算机系统维护认识,计算机系统维护试验讲解
  10. 微课|玩转Python轻松过二级:第3章课后习题解答3