可将其分为下面四个状态进行讨论即可:

 #include<stdio.h>
#include<windows.h>
#define INPUTFILE "input.c"
#define OUTPUTFILE "output.c" enum Status{
NULLSTATUS,
CPPSTATUS,
CSTATUS,
EOFSTATUS,
};
int status = NULLSTATUS; void do_null_status(FILE *ifp,FILE *ofp){ // 初始态为普通状态 (没有参与注释部分的内容 )
int c1=fgetc(ifp);
switch(c1){
case '/':{
int c2 = getc(ifp);
switch(c2){ // .../*
case '*':
fputc('/',ofp);
fputc('/',ofp);
status = CSTATUS;
break;
case '/': // ... //
fputc('/',ofp);
fputc('/',ofp);
status = CPPSTATUS;
break;
case EOF:
fputc('/',ofp);
status = EOFSTATUS;
break;
default: // .../ ...
fputc('/',ofp);
fputc(c2,ofp);
break;
}
break;
}
case EOF:
status = EOFSTATUS;
break;
default:
fputc(c1,ofp);
break;
}
}
void do_cpp_status(FILE *ifp,FILE *ofp){ // 已进入C++风格注释(// ...) 保持此种风格注释
int c = fgetc(ifp);
switch (c) {
case '\n' : // ....\n
fputc('\n',ofp);
status = NULLSTATUS;
break;
case EOF :
status = EOFSTATUS;
break;
default:
fputc(c, ofp);
break;
}
}
void do_c_status(FILE *ifp,FILE *ofp){ // 进入C风格注释 ( /* ...) 目的改为C++风格注释
int c1= fgetc(ifp);
switch(c1)
{
case '*':{
int c2= fgetc(ifp);
switch(c2){
case '/' : // //...*/...
fputc('\n' ,ofp);
status = NULLSTATUS;
break;
case EOF:
fputc('*' ,ofp);
status = EOFSTATUS;
default:
fputc('*',ofp);
ungetc(c2, ifp); //这个地方调了好多遍才注意到,实在是愚钝。
break;
}
break;
}
case '\n': // /* ... \n
fputc('\n', ofp);
fputc('/' , ofp);
fputc('/' , ofp);
break;
case EOF:
status= EOFSTATUS;
break;
default: // /* ...
fputc(c1,ofp);
break;
}
}
void convert_work(FILE *ifp,FILE *ofp){
while( status != EOFSTATUS){
switch(status){
case NULLSTATUS :
do_null_status(ifp,ofp);
break;
case CPPSTATUS :
do_cpp_status(ifp,ofp);
break;
case CSTATUS :
do_c_status(ifp,ofp);
break;
case EOFSTATUS:
break;
default:
break;
}
}
}
int main(){
FILE *ifp=fopen(INPUTFILE,"r");
FILE *ofp=fopen(OUTPUTFILE,"w");
if(ifp == NULL || ofp == NULL){
perror(" Open failed\n");
exit();
}
convert_work(ifp , ofp);
fclose(ifp);
fclose(ofp);
system("pause");
return ;
} 实例测试:
 

C语到C++注释转换小项目的更多相关文章

  1. python网页爬虫小项目开发

    这是我最近接的一个小项目,花了是整整四天多时间. 任务是将http://www.examcoo.com/index/detail/mid/7网站下所有的试卷里的试题全部提取出来,首先按照题型进行分类, ...

  2. web实践小项目<一>:简单日程管理系统(涉及html/css,javascript,python,sql,日期处理)

    暑假自学了些html/css,javascript和python,苦于学完无处练手几乎过目即忘...最后在同学的建议下做了个简单日程管理系统.借第一版完成之际,希望能将实践期间犯过的错误和获得的新知进 ...

  3. IOS-小项目(饿了么 网络部分 简单实现)

    在介绍小项目之前,在此说明一下此代码并非本人所写,我只是随笔的整理者. 在介绍之前先展现一下效果图. 看过效果图大家应该很熟悉了,就是饿了么的一个界面而已,值得注意的是,实现时并没有采用本地连接,而是 ...

  4. 每日学习心得:SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析)

    2013-8-20 1.    SQL查询表的行列转换/小计/统计(with  rollup,with cube,pivot解析) 在实际的项目开发中有很多项目都会有报表模块,今天就通过一个小的SQL ...

  5. Ado.Net小练习02(小项目CUID

    前台界面: 后台代码: namespace ado.net小项目cuid {     public partial class Form1 : Form     {         //连接字符串   ...

  6. testservice小项目总结

    关于自做小项目testservice的总结: 1.Activity与Service的绑定及之间的通信: 1)关于Activity和Service的生命周期的理解: 2)bindService方法中Se ...

  7. SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析)

    SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析) 2013-8-20 1.    SQL查询表的行列转换/小计/统计(with  rollup,with ...

  8. Vue + WebApi 小项目:构造自己的在线 Markdown 笔记本应用

    Vue + WebApi 小项目:构造自己的在线 Markdown 笔记本应用 目录 概要 知识点 完整示例图 代码与资源文件 流程步骤 概要 基于 MVP 最小可行性产品设计理念,我们先完成一个可以 ...

  9. Sudoku 小项目

    Sudoku 小项目 - 软工第二次作业 Part 1 · 项目相关 Github 地址: https://github.com/TheSkyFucker/Sudoku 项目的更多信息以及所有开发文档 ...

随机推荐

  1. 两小时搞定C#版超级战舰游戏

    课程简单介绍 游戏开发已然是眼下火星上都非常火的开发技术.而休闲的小游戏超级战舰也是眼下白领中最流行的小游戏.那超级战舰游戏是如何在两个小时高速搞定的呢?休闲类的小游戏高速开发的指南是什么?C#是如何 ...

  2. hihoCoder_二分&#183;归并排序之逆序对

    一.题目 题目1 : 二分·归并排序之逆序对 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 在上一回.上上回以及上上上回里我们知道Nettle在玩<艦これ&g ...

  3. spring mvc对静态资源的访问

    如果我们的项目使用的是springmvc,在web.xml中会有一段这的配置. <servlet> <servlet-name>springMvc</servlet-na ...

  4. python中对象、类型和元类之间的关系

    在python中对象.类型和元类构成了一个微妙的世界. 他们有在这个世界里和平共处,相辅相成.它们遵循着几条亘古不变的定律: 1.python中无处不对象 2.所有对象都有三种特性:id.类型.值 3 ...

  5. Jenkins in OpenCASCADE

    Jenkins in OpenCASCADE eryar@163.com Abstract. Jenkins是一个开源软件项目,是基于Java开发的一个持续集成工具,用于监控持续复制的工作,旨在提供一 ...

  6. 基于 HTML5 WebGL 的 3D 服务器与客户端的通信

    这个例子的初衷是模拟服务器与客户端的通信,我把整个需求简化变成了今天的这个例子.3D 机房方面的模拟一般都是需要鹰眼来辅助的,这样找产品以及整个空间的概括会比较明确,在这个例子中我也加了,这篇文章就算 ...

  7. 《python参考手册(第四版)》【PDF】下载

    <python参考手册(第四版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382222 内容介绍 本书是权威的Python语 ...

  8. 【python】元组

    Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 07:18:10) [MSC v.1900 32 bit (Intel)] on win32Type & ...

  9. [数据结构]C语言链表实现

    我学数据结构的时候也是感觉很困难,当我学完后我发现了之所以困难时因为我没有系统的进行学习,而且很多教授都只是注重数据结构思想,而忽略了代码方面,为此我写了这些博文给那些试图自学数据结构的朋友,希望你们 ...

  10. 完善chrome翻译插件ChaZD,支持有道智云api

    首先放上该项目的github地址:https://github.com/codethereforam/ChaZD 之前想找一个chrome支持划词翻译的插件,最终在知乎上看到了这个回答,推荐的是Cha ...