如何删除C/C++源代码中的注释
具体代码:
#include <stdio.h>
//删除注释
void commentFilter(FILE* sourceFile,FILE* objectFile)
{
char ch;
int flag=1;
bool read = true; //是否可读取,默认为可以
fseek(sourceFile,0,SEEK_END); //定位
int len = (int)ftell(sourceFile); //获得文件总字符长度
//逐个读取文件中的字符
for(int cursor=0;cursor<len;cursor++)
{
fseek(sourceFile,cursor,SEEK_SET);
ch = getc(sourceFile);
switch(ch)
{
//如果遇到双引号,则先将双引号之间的字符写入目标文件
case '"':
{
if(read) //不是在注释行之内
{
putc(ch,objectFile);//写入目标文件
putchar(ch); //输出到控制台
++cursor;
fseek(sourceFile,cursor,SEEK_SET);
char c = getc(sourceFile);
for(;c != '"';)
{
putc(c,objectFile);
putchar(c);
cursor++;
fseek(sourceFile,cursor,SEEK_SET);
c = getc(sourceFile);
}
break;
}
else
break;
}
case '/' :
{
if(read)
{
++cursor;
fseek(sourceFile,cursor,SEEK_SET); //定位到下一个字符,判断是否依然为'/'或'*'
char c = getc(sourceFile);
if(c == '/'){read=false;flag=1;break;}//flag=1,表示遇到的是以//开头的注释
if(c == '*'){read=false;flag=2;break;}//flag=2,表示遇到的是以/*开头的注释
else {--cursor;break;}
}
else
break;
}
case '*' :
{
if(!read) //之前是注释行
{
++cursor;
fseek(sourceFile,cursor,SEEK_SET);
char c = getc(sourceFile);
if(c == '/' && flag == 2)//下一个是'/'且为第二种注释
{
++cursor;
fseek(sourceFile,cursor,SEEK_SET);
ch = getc(sourceFile);
read = true;
}
else
{--cursor;break;}
}
else
break;
}
case '\n' :
{
if(!read && flag!=2)
read = true;
//判断下一行是否为空行,如果是则直接忽略
++cursor;
fseek(sourceFile,cursor,SEEK_SET);
char c = getc(sourceFile);
if(c != '\n') //不是则将cursor还原
--cursor;
break;
}
default:
break;
}
if(read) //将读取到的字符写入目标文件及输出到控制台
{
putchar(ch);
putc(ch,objectFile);
}
}
}
int main()
{
FILE* sourceFile,* objectFile;//源文件,目标文件
char sourceName[20],objectName[20];//源文件名,目标文件名
gets(sourceName);
gets(objectName);
sourceFile = fopen(sourceName,"r");
objectFile = fopen(objectName,"w");
commentFilter(sourceFile,objectFile);
return 0;
}
如何删除C/C++源代码中的注释的更多相关文章
- IDEA插件:快速删除Java代码中的注释
背景 有时,我们需要删除Java源代码中的注释.目前有不少方法,比如: 实现状态机.该方式较为通用,适用于多种语言(取决于状态机支持的注释符号). 正则匹配.该方式容易误判,尤其是容易误删字符串. ...
- visual studio用"查找替换"来删掉源代码中所有//方式的纯注释和空行
visual studio用"查找替换"来删掉源代码中所有//方式的纯注释和空行 注意:包括/// <summary>这样的XML注释也都删掉了. 步骤1/2(删除注释 ...
- 怎样删除C/C++代码中的所有注释?浅谈状态机的编程思想
K&R习题1-23中,要求“编写一个程序,删除C语言程序中所有的注释语句.要正确处理带引号的字符串与字符常量.在C语言中,注释不允许嵌套”. 如果不考虑字符常量和字符串常量,问题确实很简单.只 ...
- 怎样批量删除PDF文件中的注释
日常我们在阅读一些PDF文章时候,我们会发现有些PDF文章带有非常多的注释,显得非常不美观,影响了阅读体验.那么PDF文章里的批注应该怎么进行删除呢?怎样批量删除PDF文件中的注释? 操作教程: ...
- 【PTA】6-1 **删除C程序中的注释 (31 分)
请你编写一个函数,将C语言源程序中的注释全部删去. 函数原型 // 删除注释 void Pack(FILE *src, FILE *dst); 说明:参数 src 和 dst 均为文件指针,其中:sr ...
- eclipse 中的注释 快捷键
(1)Ctrl+Space 说明:内容助理.提供对方法,变量,参数,javadoc等得提示, 应运在多种场合,总之需要提示的时候可先按此快捷键. 注:避免输入法的切换设置与此设置冲突 (2)Ctrl ...
- eclipse_中的注释_快捷键
eclipse 中的注释 快捷键 把要注释的代码选中,按Ctrl+Shift+/ /* */ 形式的 ctrl+/ //形式的 取消代码注释: 把要注释的代码选中,按Ctrl+Shift+\ /* ...
- 慕课网-安卓工程师初养成-2-12 如何在Java中使用注释
来源:http://www.imooc.com/code/1274 在编写程序时,经常需要添加一些注释,用以描述某段代码的作用. 一般来说,对于一份规范的程序源代码而言,注释应该占到源代码的 1/3 ...
- Java中的注释
代码注释是架起程序设计者与程序阅读者之间的通信桥梁,最大限度的提高团队开发合作效率.也是程序代码可维护性的重要环节之一.所以我们不是为写注释而写注释.下面说一下Javadoc注释规范以及楼主在J2EE ...
随机推荐
- QTREE系列题解
打了快一星期的qtree终于打完了- - (其实还有两题改不出来弃疗了QAQ) orz神AK一星期前就虐完QTREE 避免忘记还是简单写下题解吧0 0 QTREE1 题意: 给出一颗带边权树 一个操作 ...
- UVa12657 - Boxes in a Line(数组模拟链表)
题目大意 你有一行盒子,从左到右依次编号为1, 2, 3,…, n.你可以执行四种指令: 1 X Y表示把盒子X移动到盒子Y左边(如果X已经在Y的左边则忽略此指令).2 X Y表示把盒子X移动到盒子Y ...
- RestTemplate中文乱码问题
使用RestTemplate传输带有图片的表单时,需要对表单中的中文参数进行URL编码, eg :URLDecoder.decode(name); // 使用默认的解码 ...
- linux(centos 6)下记录所有用户的操作以及ip、时间
编辑/etc/profile文件,在文件末尾加入下面代码: [root@iZ23nn1p4mjZ root]# vi /etc/profile history USER=`whoami` USER_I ...
- oracle 全文检索技术
1.查看用户: select * from dba_users WHERE username='CTXSYS';select * from dba_users WHERE username='CTXS ...
- Netty笔记
1 基本介绍 Bootstrap Netty应用程序通过设置 bootstrap(引导)类开始,该类提供了一个用于应用程序网络层配置的容器.Bootstrap有两种类型,一种是用于客户端的Bootst ...
- Castle IOC容器实践之FactorySupport Facility
PDF版本下载:http://file.ddvip.com/2008_10/1223538519_ddvip_4853.rar示例代码下载:http://file.ddvip.com/2008_10/ ...
- .NET的Snk使用方法
保护你Asp.Net生成的DLL和Code不被别人反编译 大家做项目开发一般都是分层的,比如UI层,业务层,数据访问层.业务层引用数据访问层的DLL(比如 dataAccess.dll),并使用da ...
- arcmap+vs2010
esri为vs2010提供了addin开发模版,有几个关键的地方注意下 1.C:\Program Files (x86)\MSBuild\Esri\下存在ESRI.ArcGIS.AddIns.Serv ...
- Laravel入门笔记
Laravel 是一款简洁,优雅的一款框架,可以说是入门TP后的第二款可以选择的框架. 目录部分: app -> 自己写的代码 http -> Controller -> 控制器 b ...