请你编写一个函数,将C语言源程序中的注释全部删去。

6-10 **删除C程序中的注释 (15 分) PTA ** 6-10 **删除C程序中的注释 (15 分) ** 编写一个函数,将C语言源程序中的注释全部删去函数原型 // 删除注释 void Pack(FILE *src, FILE *dst); 说明:参数 src 和 dst 均为文件指针,其中:src 指示原始程序文件,dst 指示整理后得到的文件。 C语言规定:注释以 /* 开始,以 / 结束。注释可以跨行,不允许嵌套。字符串中的 / 和 */ 不是注释。 此外C语言还规定:注释相当于一个空白字符。因此,注释被删除后应补入一个空格。 裁判程 阅读详情
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <malloc.h>
// 删除注释
void Pack(FILE *src, FILE *dst);

int main()
{
    char sname[1024], dname[1024];
    FILE *sfile, *dfile;

    gets(sname);
    gets(dname);

    sfile = fopen(sname, "rb");
    if (!sfile)
    {
        printf("%s 无法打开!\n", sfile);
    }
    dfile = fopen(dname, "wb");
    if (!dfile)
    {
        printf("%s 无法打开!\n", dfile);
    }

    if (sfile && dfile)
    {
        printf("正在整理...");
        Pack(sfile, dfile);
        puts("整理完成!");
    }

    if (sfile)
    {
        fclose(sfile);
    }
    if (dfile)
    {
        fclose(dfile);
    }
    return 0;
}

void Pack(FILE *src, FILE *dst) 
{ 
    #define IN_MULTI 1 
    #define IN_SINGLE 2 
    #define IN_SINGLE_QUOT 4 
    #define IN_QUOT 3//在字符串  
    int i = 0,j,k,state = 0; 
    char *str = (char *)malloc(sizeof(char)*10000); 
    char c,next; 
    while(!feof(src)) 
    { 
        c = fgetc(src); 
        if(c == EOF) 
            break; 
 
        if(state == 0) 
        { 
            switch(c){ 
                case '/': 
                    next = fgetc(src); 
                    if(next == '*')/**/ 
                    { 
                        state = IN_MULTI; 
                        break; 
                    } 
                    else if(next == '/')// 
                    { 
                        state = IN_SINGLE; 
                        break; 
                    }else 
                    { 
                        fputc(c,dst); 
                        fputc(next,dst); 
                        break; 
                    } 
                    break; 
                case '\'': 
                    fputc(c,dst); 
                    state = IN_SINGLE_QUOT;     
                    break; 
                case '\"': 
                    state = IN_QUOT;//" 
                    fputc(c,dst); 
                    break; 
                default: 
                    fputc(c,dst); 
                    break; 
 
            } 
        }else if(state == IN_MULTI)//在多行注释 
        { 
            if(c == '*') 
            { 
                next = fgetc(src); 
                if(next == '/') 
                { 
                    state = 0; 
                    fputc(' ',dst);     
                } 
            } 
        }else if(state == IN_SINGLE)//单行注释 
        { 
 
            if(c == '\n')//换行 
            { 
 
                    fputc(' ',dst); 
                    fputc(c,dst); 
                    state = 0; 
            } 
 
        }else if(state == IN_SINGLE_QUOT) 
        { 
            fputc(c,dst); 
            if(c == '\'') 
            { 
                state = 0; 
            } 
        }else if(state == IN_QUOT) 
        { 
            if(c == '\"')//字符串结束  
            { 
                fputc(c,dst); 
                state = 0; 
            }else if(c == '\\')//转义字符,排除\\"  
            { 
                next = fgetc(src); 
                fputc(c,dst); 
                fputc(next,dst); 
            }else 
            { 
                fputc(c,dst); 
            } 
        } 
 
    } 
}

 

源代码注释清理器(清除C++源码中的所有注释内容,简单易用) CommentCleaner精简版 BY: JellyCode 09/12/02 1.功能:此程序能够去除 C++程序源文件中的所有注释,能识别“//”与“/**/”两种注释 2.用法:将待清理的 C++源代码 存为纯文本形式“test.txt”,将文本文件copy到CommentCleaner.exe同一个文件夹内,运行 CommentCleaner.exe程序将会在本目录下生成一个“testout.txt”文件,也就是没有注释的源代码。 3.本程序提供了一个示例,也就是压缩包中的“test.txt” 注:因为本人用的是VS2005开发平台编译的.exe程序,使用者计算机上必须装有.net Framework 2.0 或更高 版本,方能运行此程序。 立即下载

相关推荐

C语言删除注释程序

C语言实现的,可以自动删除程序中的注释,程序可读性非常好

C语言——移除数组中的指定元素

移除数组中的指定元素

qq_59990833的博客 485

注释删除:已实现:functions.c

Zpracovánítextů-自动机 NaprogramujtekonečnýMealyho automat ,kterýzevstupníhosouboru v jazyce C / C ++odstranípoznámky(tzn。všemezi znaky / * * / nebo // \ n)。 Ošetřenívstupů puts(“ Toto jeřetězec/// toto ani / * toto * / nenipoznámka”); putchar('“'); / * Toto byl znak uvozovky,neřetězec。Takžetoto jepoznámka* / 反斜杠:puts(“ Toto” jestáleřetězec“); //代表saméplatíi proznakovékonstanty v apostrofech: ' Vs

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

编写一个函数,将C语言源程序中的注释全部删去函数原型 // 删除注释 void Pack(FILE *src, FILE *dst); 说明:参数 src 和 dst 均为文件指针,其中:src 指示原始程序文件,dst 指示整理后得到的文件。 C语言规定:注释以 /* 开始,以 / 结束。注释可以跨行,不允许嵌套。字符串中的 / 和 */ 不是注释。 此外C语言还规定:注释相当于一个空白字符。因此,注释被删除后应补入一个空格。 裁判程序 #include <stdio.h> #inc

Ekertree的博客 3357

c语言,删除字符串中的一部分内容

指针部分的实现原理可以看我的上一篇博客。

qq_61911942的博客 228

编写一个程序,实现将c语言源程序中的注释全部删除

《程序设计基础-c语言》杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p257 习题8 6.编写一个程序,实现将c语言源程序中的注释全部删除 #include<stdlib.h> #include<stdio.h> #include<string.h> int main() { FILE *fp,*fp1; char str[99]="",str1[99]=""; int i,j,no=0; if((fp=fopen

小飞的博客 3207

编写一个删除c语言中的注释语句/* */的程序

//编写一个删除c语言中所有的注释语句 /****************************************************** "Write a program to remove all comments from a C program. Do

4158

编写一个删除C语言程序中所有注释语句,正确处理带引号的字符串与字符常量

//这是书上的例题,//后面的内容不能删除  字符串内的/**/能正常打印 #include void rcomment(int c); void in_comment(void); void echo_quote(int c); main() {     int c, d;     while((c = getchar()) != EOF)         rcom

lhm的博客 2116

习题课第一次作业:1、去除C程序中的注释

1、去除C程序中的注释 总时间限制: 1000ms 内存限制: 65536kB 描述: C程序的注释用/…/来表示。一个程序,将输入的C程序源代码中的注释去掉,输出去掉注释之后的源代码。用于测试的C代码保证符合语法,不使用C++的//注释语法。注意,C语言不允许出现嵌套注释。具体来说,对于//*/”/”,如果不允许嵌套注释,那么它表示字符串”/”;如果允许嵌套注释,它表示一个引号”

Veniversum的博客 4760

编写一个删除c语言程序文件中所有的注释语句

//删除c语言程序中所有的注释语句,要正确处理带引号的字符串与字符串常量 #include <stdio.h> using namespace std; #define MAXLINE 1000 void rcomment(int c); void in_comment(void); void deleteTail(void); FILE* fp; FILE* fp...

weixin_34064653的博客 757

删除C语言程序中所有的注释语句(有疑问)

[cpp] view plain copy #include       void rcomment(int c);   void in_comment();   void echo_quote(int c);      int main()   {          int c, d;          while((c = getchar()

maoshanbo的博客 869

C语言注释删除

C语言编写的删除C语言注释的代码,有限自动机,编译原理,支持所有类型注释

输出程序文件本身及删除程序中的注释

记得在我的以前的一篇文章中曾经写过一篇输出程序文件本身的文章,今天对那篇文章稍作拓展。 一般程序员在写程序的时候,为了能够让以后理解更加方便容易,往往会添加上一些注释注释在C/C++中有两种类型,分别如下所示: (1)//注释内容 (2)/* 注释内容 [\n]*/ 下面我们就对这这两种情况进行分析,看看如何删去这些注释部分。 对于第一种情况,以两个双斜杠开头的注释写法,只要我们在

马靖的个人技术博客 1614

删除C文件中的注释

删除C文件中的注释 今天是C语言课后的一道题目,感觉比较有趣,刚开始一直没有相通,花了很长时间,后来想到了一种解决办法,在这里分享一下,有其他办法的也可在评论区留言大家交流。 题目描述 删除文件中的注释:将C语言源程序(hello.c)文件中的所有注释去掉后存入另一个文件(new_hello.c) 问题分析 注释有两种,多行注释(“/* /”)和单行注释(“// ”)。 解决思路如下: ...

qq_41970098的博客 9808

面试训练去除c/c++中的注释

程序员面试宝典上面的题目有很多是很经典的问题,可供我们思考,而且会对我们面试有很大好处。 下面是第45页的一个题目:编写一个函数,实现把C/C++程序代码中的注释去掉,我开始看的时候总是看不懂,后来在网上看到一个网友详细的分析了其代码,但是我看了之后觉得有好多地方他分析的都不对,于是,我自己又花了半天的时间分析了一遍,觉得自己理解了,下面给出我的分析语句。如果还有不严谨的部分,指教!

hiphopmattshi的专栏 1217

7-14 删除字符串中指定字符(字符串读取)

删除字符串中的指定字符,字符串和要删除的字符均由键盘输入。

Virgo_616的博客 1413

删除文件中的注释(C语言

【题目描述】删除文件中的注释:将C语言源程序(hello.c)文件中的所有注释去掉后存入另一个文件(new_hello.c)。暂时没有想到好的方法,生气!

dream_aleaf的博客 1024

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

K&R习题1-23中,要求“编写一个程序,删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。在C语言中,注释不允许嵌套”。 如果不考虑字符常量和字符串常量,问题确实很简单。只需要去掉//和/* */的注释。 考虑到字符常量'\''和字符串常量"he\"/*hehe*/",还有类似<secure/_stdio.h>的头文件路径符号以及表达式5/3中...

weixin_30457465的博客 1228
上一篇: 螺旋方阵
下一篇: Vscode代码片段(快速插入if,while等等)
raining_day101
博客等级 码龄7年 2粉丝 3原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值