删除c代码注释程序

lostchild 发布于 2014/01/17 01:53
阅读 394
收藏 4
c

这不科学啊!程序写不出睡不着!

k&r 1-23练习题

//删除c程序语言中所有的注释语句。要正确处理带引号的字符串与字符常量!
#include <stdio.h>
#define MAX 1000//人物上限
#define GAN '/'
#define YH '\''
#define SY '"'
#define STAR '*'
int get(char c[],int li)//监控与抓捕
{
    int i,j;
    char ch;
    int n=0;
    for(i=0,j=0;i<li&&(ch=getchar())!='@';i++)//开监控
    {
        switch(n)
        {
            case 0://世界0
                if(ch==GAN)
                {
                    n=2;
                    c[j++]=ch;
                }//持有重型杀伤武器,站到2号区接受检查
                else if(ch==YH||ch==SY)
                {
                    n=1;
                    c[j++]=ch;
                } //持有危害武器,请到审问室1
                else c[j++]=ch;
                break;
            case 1://审问室1
                if(ch==YH||ch==SY)
                {
                    n=0;
                    c[j++]=ch;
                }//证实不是凶器,释放0
                else c[j++]=ch;
                break;
            case 2://行注释犯罪怀疑
                if(ch==GAN)
                {
                    n=3;
                    c[j--];//放下手上的武器
                }//抓到疑犯/去牢房3
                else if(ch==STAR)
                {
                    n=4;
                    c[j--];//放下手上的武器
                }//抓到疑犯*去状态4
                else
                {
                    n=0;
                    c[j++]=ch;
                }//不是罪犯,释放0
                break;
            case 3://
                if(ch=='\n')
                {
                    n=0;
                    c[j++]=ch;
                }//监期已满,放监0
                else n=3;
                break;
            case 4:
                if(ch==STAR)
                {
                    n=5;
                }//安分守自,去牢房5
                else n=4;
                break;
            case 5:
                if(ch==GAN)
                {
                    n=0;
                }//刑期已满,释放回世界0
                else n=5;
                break;
        }
    }
    return i;
}
main()
{
    int lem,j;
    char string[MAX];
    printf("请输入@为代码删除注释\n");
    while((lem=get(string,MAX))>0)
    {
        printf("程序处理完毕!\n");
        if(lem>0)
        {
            printf("%s\n",string);//给疑犯门洗案低
        }
        for(j=lem;j>=0;string[j--]=0);//清楚作案记录
    }
    return 0;
}



唯一的遗憾就是@后输入处理完的程序后会有一个乱码!不知道啥回事,心想这下应该能入睡了吧!

问解决这问题!

加载中
返回顶部
顶部