首页 > 代码库 > 【C语言】练习1-23

【C语言】练习1-23

  •  题目来源:《The C programming language》中的习题
  •  练习1-23: 写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。在C语言中,注释不允许嵌套

  思路:

  注释语句分为两种://和/* */。在代码中,我们需要做的是,删除所有的注释语句。以下分两种情况来分析:

  1. 注释符号为//的时候,首先我们读取字符的时候,我们会按顺序读取,读取第一个字符/,我们需要把这个字符存入tmp中,如果接下来的字符仍然为/,说明这一行都是注释,需要直接跳过而不输出,直到遇到换行。其他情况的时候,则直接原样输出即可。
  2. 注释符号为/*开头的时候,首先,我们同样会按顺序先读取/字符,并存入tmp中,如果下一个字符为*,则说明开始进入了注释中,直到遇到*/结束,而不管是否为换行符。

  C语言代码实现:

#include<stdio.h>

void main(){
    int c,former,comment;
    former=-1;
    comment=0;
    while((c=getchar())!=EOF){

            if(comment==1){        // 注释符类型为//
                if(c==\n){
                    putchar(c);
                    former=-1;
                    comment=0;
                }
            }else if(comment==2){  // 注释符类型为/* */
                if(c==/ && former==*){ 
                    former=-1;
                    comment=0;
                }else{
                    former=c;
                }
            }else{
                if(c==/){
                    if(former==/){      //注释符为//的开始
                        comment=1;    
                    }
                }else if(c==*){
                    if(former==/){       //注释符为/* */的开始
                        comment=2;
                    }else{
                        putchar(c);
                    }
                }else{
                    if(former==/){
                        putchar(/);
                    }
                    putchar(c);
                }
                former=c;
            }
    
    }
}