来个去除c程序中的注释的小程序

该博客展示了一段C语言代码,实现了简单注释移除功能。代码通过状态机的方式,处理不同状态下的字符输入,包括注释、双引号和单引号内的内容,最终将处理后的字符输出,去除了代码中的注释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
  * A simple comment remover.
  */

#include "stdio.h"
#include "stdlib.h"

void main()
{
    int c = 10;
    int pre;
    int state = 0;
     
 while(c != EOF && (c=getchar())!= EOF)
 {
     switch(state)
     {
         case 1:/*in comment*/
             while(c != EOF && state == 1)
             {
                 while(c !='*' && c != EOF)
                     c = getchar();
                 if(c == EOF)
                     return;
                 c = getchar();
                 if(c != EOF && c=='/')
                     state = 0;
                 else if(c !=EOF && c == '*')
                 {
                     while( (c = getchar()) != EOF && c == '*')
                         ;
                        if(c == '/')
                            state = 0;   
                 }
             }  
             break;
         case 2: /* in double quote*/
             while(c != EOF && state == 2)
             {
                 putchar(c);
                 while(c != EOF && c != '//' && c != '"')
                 {
                     c = getchar();
                     if(c != EOF)
                         putchar(c);
                 }
                 if(c == '//')
                 {
      if((c = getchar()) != EOF)
      {
       putchar(c); 
       c = getchar();
      }
      
     }else if(c == '"')
                     state = 0;
             }   
             break;
         case 3: /* in single quote */
             while(c != EOF && state == 3)
             {
                 putchar(c);
                 while(c != EOF && c != '//' && c != '/'')
                 {
                     c = getchar();
                     if(c != EOF)
                         putchar(c);
                 }
                 if(c == '//')
                 {
                     if((c = getchar()) != EOF)
      {
       putchar(c); 
       /* it is no side effect, if "c" is not a escape character*/
       c = getchar();
      }
                    
                 }else if(c == '/'')
                     state = 0;
             }   
             break;
         case 0:/* normal*/
             while(c != EOF && state == 0)
             {
                 if(c == '"')
                 {
                     putchar(c);
                     state = 2;
                 }else if( c == '/'')
                 {
                     putchar(c);
                     state = 3;
                 }else if(c == '/')
                 {
                     int next = getchar();
                     if(next = '*')
                         state = 1;
                     else
                     {
                         putchar(c);/* c = '/' */
                         c = next;
                     }
                    
     }else{
      putchar(c);
      c = getchar();
     }
             }
             break;
         default: /* should not goes here*/
             putchar(c);
     }
 }
 
 return;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值