c语言走向c++的第一步,注释转换

最近刚开始学习c++,接触了一个小项目,写一个程序将C语言的注释转化为c++的注释,这个里面也要分很多种情况,下面我就把我做的小程序分享出来,在把C语言注释转化为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++注释问题
// /*xxxxxxxxxxx*/
下面就分情况处理一下这几种情况 首先,你要成功创建一个文件并能够把C语言的注释写进去
void AnnotationConvert(const char* inputFile, const char* outputFile)
{
FILE* fIn = fopen(inputFile, "r");//用只读的方式打开一个文件
//检测文件是否打开成功,并输出错误码
//只读方式打开文件失败,有可能是文件不存在或路径错误等问题
if (fIn == NULL)
{
printf("打开文件%s失败,errno:%d", inputFile,errno);
return;
}
//写方式打开文件失败,这是要注意关闭已打开的fIn,否则可能导致内存泄漏等问题
FILE* fOut = fopen(outputFile, "w");
if (fOut == NULL)
{
fclose(fIn);//关闭文件流
printf("打开文件%s失败,errno:%d", outputFile,errno);
return;
}
Convert(fIn, fOut);
//打开文件成功,要注意关闭文件流
fclose(fIn);
fclose(fOut);

}

在这里,可以定义两个枚举常量用来判断是c语言注释的开始还是结束
typedef enum State
{
C_BEGIN,
C_END,
}State;

void Convert(FILE* fIn, FILE*fOut)
{
//断言文件流
assert(fIn);
assert(fOut);
char first, second;//读取两个字符
State tag = C_END;
do
{
first = fgetc(fIn);
switch (first)
{
//1.普通情况 /*int i = 0;*/
case‘/‘:
second = fgetc(fIn);
if (second == ‘*‘)//当读取的第一个字符为/第二个字符为*时
{
//3.匹配问题/*int i = 0;/*xxxxx*/
if (tag == C_END)//判断是否上一个C语言注释已结束,即一个C语言注释的开始,
//若是,转化为c++注释的开始
{
fputc(‘/‘, fOut);
fputc(‘/‘, fOut);
tag = C_BEGIN;
}
else //若不是,按原样输出
{
fputc(‘/‘, fOut);
fputc(‘*‘, fOut);
}
}
//7.c++注释问题
// /*xxxxxxxxxxx*/
else if (second == ‘/‘) //当读取的第一个字符为/且第二个字符也为/
{
fputc(‘/‘, fOut); //按原样输出
fputc(‘/‘, fOut);
char next;
do
{
next = fgetc(fIn); //读取第三个字符并输出它
fputc(next, fOut);
} while (next != ‘\n‘ && next != EOF);
}
else
{
fputc(first, fOut);
fputc(second, fOut);
}
break;
case‘*‘:
second = fgetc(fIn);
if (second == ‘/‘) //当第一个字符为*第二个字符为/时输出一个换行
{
char next = fgetc(fIn);
//5.多行注释 /**//**/
fputc(‘\n‘, fOut);
if (next == ‘/‘) //当读取的第三个字符也为/时,倒退读取一个字符判断是否为多行注释的问题
{

fseek(fIn, -1, SEEK_CUR);//倒退读取
}
//2.换行问题/*int i = 0;*/intj = 0;
else if (next != ‘\n‘&& next != EOF)
//当读取的第三个字符不为换行不是/且不是文件结束的标志时,输出第三个字符
{
fputc(next, fOut);
}
else
{
fputc(‘\n‘, fOut);
}
tag = C_END;
//C语言注释的结尾,将用作标志的枚举常量置为end
}
//6.连续的**/问题
/***/
else if (second == ‘*‘)
//当读取的第二个字符为*时,输出第一个字符且倒退读取一个字符
{
fputc(first, fOut);
fseek(fIn, -1, SEEK_CUR);
}
else
{
fputc(first, fOut);
fputc(second, fOut);
}
break;
case‘\n‘:
// 4.多行注释
/*int i = 0;
int j = 0;
int k = 0;
*/int k = 0;
//当读取到的第一个字符为换行时首先输出一个换行
fputc(‘\n‘, fOut);
if (tag == C_BEGIN)
//判断是否为一个C语言注释的开始,若是,进行转化
{
fputc(‘/‘, fOut);
fputc(‘/‘, fOut);
}
break;
default:
fputc(first, fOut);
break;
}
}while (first != EOF); //读取到的字符不是文件结束
}
这样子一个注释转换的小项目就基本完成了

时间: 2024-08-02 07:00:22

c语言走向c++的第一步,注释转换的相关文章

接受亏损是走向成功的第一步

很多新手量化投资者都会遇到这样一个问题,那就是初入市场的时候非常迷茫.不知道自己适合做什么风格的交易.所以日内.波段.趋势等类型的交易全都试了一遍,结果就是什么都做不好.那么究竟是什么原因造成不断的转换风格呢? 很多交易员朋友初入市场时碰到账户发生亏损的情况,都会心里很焦躁甚至睡不着觉.或者是想办法找到自己错误发生的原因,然后要求自己不能再犯这样的错误.很多新手交易员都没有形成自我科学的系统概念.所以当遇到亏损的时候自然而然的就会认为当前的交易方式不适合自己,然后就开始不停的更换交易方式.到最后

C语言程序设计入门学习五步曲(转发)

笔者在从事教学的过程中,听到同学抱怨最多的一句话是:老师,上课我也能听懂,书上的例题也能看明白,可是到自己动手做编程时,却不知道如何下手.发生这种现象的原因有三个: 一.所谓的看懂听明白,只是很肤浅的语法知识,而我们编写的程序或软件是要根据要解决问题的实际需要控制程序的流程,如果你没有深刻地理解C语言的语句的执行过程(或流程),你怎么会编写程序解决这些实际问题呢? 二.用C语言编程解决实际问题,所需要的不仅仅是C语言的编程知识,还需要相关的专业知识.例如,如果你不知道长方形的面积公式,即使C语言

NetStream.appendBytes, 走向Flash P2P VOD的第一步

之前被告知可以自行实现Flash p2p的点播功能, 但一直疑惑, 印象中NetStream并未提供相关方法, 前天看订阅时发现的文章: ByteArray Access to NetStream in Flash Player 10.1 [ by Thibault Imbert ] 进而找到文档: NetStream.html#appendBytes() 看过上述两篇文章后, 对appendBytes这个方法有一定了解, 简单来讲就是在数据生成模式下提供NetStream音视频数据供其播放.

Scala的第一步

第一步:学习使用Scala解释器 开始Scala最简单的方法是使用Scala解释器,它是一个编写Scala表达式和程序的交互式“shell”.在使用Scala之前需要安装Scala,可以参考 First Steps to Scala 内容. 你可以在命令提示符里输入scala使用它: $ scala Welcome to Scala version 2.9.2. Type in expressions to have them evaluated. Type :help for more inf

【笨木头Unity】入门之旅001:学游泳的第一步是下水

这次的教程更像是我个人的学习记录,所以不一定是从零开始,更多的是,从另一个引擎转战到Unity的教程. 学游泳的第一步,不用说了,必定要下水. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址:http://www.benmutou.com/archives/2035 文章来源:笨木头与游戏开发 1.Unity安装什么的乱七八糟 首先自己想办法找到Unity官网,然后下载安装,这里有个小提示,官方默认下载的是一个下载器,并不是完整安装包. 如果你想下载完整安装包,请点击下载页面的[

核心思想:用技术创造价值的第一步:定义价值点,也就是找到杠杆的支点(陈天桥是典范)

杠杆 技术本就是一种杠杆. 曾经,技术的草莽时期,是一个英雄辈出的年代.两个人可以创造 Unix,C 语言,一个人也可以发明 Linux,也可以写出 Foxmail.掌握了技术,就可能创造历史,那时技术的杠杆很高. 如今,是技术的成熟时期,个体英雄少了,更多是一种团队和集团军作战的时代.如果你是技术的绝世高手(精的极致),那你需要找到一支契合你技能的场景与队伍,加入进去.此时个人的技术杠杆也许不像曾经那么高 —— 能创造历史,但也许你们这个队伍还是有机会能创造历史. 前几年,Facebook 曾

编程第一步

3.2 编程第一步当然,除了将两数简单相加,python可以完成很多复杂的工作.比如我们可以写出fibonacci序列. >>> # Fibonacci series: ... # the sum of two elements defines the next ... a, b = 0, 1 >>> while b < 10: ... print b ... a, b = b, a+b ... 1 1 2 3 5 8 这个例子包含了很多新的特性. # 第一行包含

黑 马 程 序 员_视频学习总结&lt;c语言&gt;----01 关键字、标识符、注释、 常量、变量

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.关键字 1.关键字就是C语言提供的有特殊含义的符号,有些地方也叫做“保留字”. 2.C语言一共提供了32个关键字,这些关键字都被C语言赋予了特殊含义. auto double int struct break else long switch case enum register typedef char extern return uni

函数式编程第一步——流程控制

失落迷茫了好一段日子.终于我用接触2个月的技术Nodejs成功的混到一份工作.严格来说只学习了3天(白天睡觉,晚上通宵学习),后面的时间都是在配置环境.总的来说,函数式编程是有应用的市场的,而且学习门槛也不是太高.就算从来没听说过函数式编程的人也会知道javascript,也会使用jquery.虽然很多是把它当作过程式的来用,来看待.这也是在于它的语法看起来太像C,太像过程式的语言. 之前一直想写一些关于函数编程文章来记录我学习的历程.之前写了一篇使用F#的,不过大家好像对F#比较排斥.以后我从