具体代码:

#include <stdlib.h> 

#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++源代码中的注释的更多相关文章

  1. IDEA插件:快速删除Java代码中的注释

    背景   有时,我们需要删除Java源代码中的注释.目前有不少方法,比如: 实现状态机.该方式较为通用,适用于多种语言(取决于状态机支持的注释符号). 正则匹配.该方式容易误判,尤其是容易误删字符串. ...

  2. visual studio用"查找替换"来删掉源代码中所有//方式的纯注释和空行

    visual studio用"查找替换"来删掉源代码中所有//方式的纯注释和空行 注意:包括/// <summary>这样的XML注释也都删掉了. 步骤1/2(删除注释 ...

  3. 怎样删除C/C++代码中的所有注释?浅谈状态机的编程思想

    K&R习题1-23中,要求“编写一个程序,删除C语言程序中所有的注释语句.要正确处理带引号的字符串与字符常量.在C语言中,注释不允许嵌套”. 如果不考虑字符常量和字符串常量,问题确实很简单.只 ...

  4. 怎样批量删除PDF文件中的注释

    日常我们在阅读一些PDF文章时候,我们会发现有些PDF文章带有非常多的注释,显得非常不美观,影响了阅读体验.那么PDF文章里的批注应该怎么进行删除呢?怎样批量删除PDF文件中的注释?   操作教程: ...

  5. 【PTA】6-1 **删除C程序中的注释 (31 分)

    请你编写一个函数,将C语言源程序中的注释全部删去. 函数原型 // 删除注释 void Pack(FILE *src, FILE *dst); 说明:参数 src 和 dst 均为文件指针,其中:sr ...

  6. eclipse 中的注释 快捷键

    (1)Ctrl+Space  说明:内容助理.提供对方法,变量,参数,javadoc等得提示, 应运在多种场合,总之需要提示的时候可先按此快捷键. 注:避免输入法的切换设置与此设置冲突 (2)Ctrl ...

  7. eclipse_中的注释_快捷键

    eclipse 中的注释 快捷键   把要注释的代码选中,按Ctrl+Shift+/ /* */ 形式的 ctrl+/ //形式的 取消代码注释: 把要注释的代码选中,按Ctrl+Shift+\ /* ...

  8. 慕课网-安卓工程师初养成-2-12 如何在Java中使用注释

    来源:http://www.imooc.com/code/1274 在编写程序时,经常需要添加一些注释,用以描述某段代码的作用. 一般来说,对于一份规范的程序源代码而言,注释应该占到源代码的 1/3 ...

  9. Java中的注释

    代码注释是架起程序设计者与程序阅读者之间的通信桥梁,最大限度的提高团队开发合作效率.也是程序代码可维护性的重要环节之一.所以我们不是为写注释而写注释.下面说一下Javadoc注释规范以及楼主在J2EE ...

随机推荐

  1. 生成chm文档工具- Sandcastle -摘自网络

    Sandcastle是微软官方的文档生成工具,NDoc开发停止后,这个貌似也是唯一的一个这方面的工具.它从dll文件及其xml注释文件能够 生成完整的帮助文档,支持多种生成格式(Helpe1x:chm ...

  2. Android强大的开源库与系统架构工具

    后来加上的,因为太强大了,android上百个可立即使用的开源库介绍:https://github.com/Trinea/android-open-project 一款功能强大且实用的开发工具可以为开 ...

  3. POJ 1511 Invitation Cards (最短路spfa)

    Invitation Cards 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/J Description In the age ...

  4. JSF 2 radio buttons example

    In JSF, "h:selectOneRadio" tag is used to render a set of HTML input element of type " ...

  5. C#引用传递

    学过C#的人都知道,通过值或通过引用,值类型和引用类型都可以作为方法参数传递.在C#中,不管是值类型或者是引用类型,所有方法参数在默认情况下是通过值传递的. 1)通过值传递值类型 在通过值传递作为方法 ...

  6. #pragma comment使用

    编程经常碰到,理解的总不是很透彻,在这里查阅资料总结一下! 在编写程序的时候,我们常用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作. #pragma once : 这是一个 ...

  7. shell脚本的入参

    shell脚本参数可以任意多,但只有前9个可以被访问,使用shift命令可以改变这个限制.参数从第一个开始,在第九个结束.$0 程序名字$n 第n个参数值,n=1..9 $* 所有命令行参数$@    ...

  8. 数据库MySQL常用命令复习

    -- 查看数据库 show databases; -- 创建数据库 create database '数据库名'; -- 删除数据库 drop database '数据库名'; -- 选库 use ' ...

  9. sgu - 274 - Spam-filter

    题意:判断一个字符串是不是有效的邮件地址. 题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=274 ——>>照着题目做. ...

  10. CESAsia:英特尔RealSense3D实感技术亮眼

    每年CES展会上都会有许多新奇的.更具创意的产品和创新技术亮相,而作为全球科技盛会之一的CES Asia也不例外.在CES Asia2016展会上,英特尔(Intel)可谓是有备而来,带着旗下支持Re ...