7-2 过滤注释

发布时间:2024年01月22日

7-2 过滤注释

分数 100

全屏浏览题目

切换布局

作者?scs

单位?北京邮电大学

C语言的注释分为两种,第一种:在一行源代码中“//”后的内容为注释内容。第二种:“/*”与“*/”之间的内容为注释内容。第三种(其实是第二种的特例):程序中只出现了“/*”,没有“*/”与之对应,那么将“/*”后的全部内容都要过滤掉。注意,只要是注释内容,那么注释内容中的字符应该全部忽略,即不起任何的作用。例如“/*”与“*/”之间如果再有“//”,那么“//”不应起作用;如果“//”后同行内再有“/*”,那么“/*”也不应起作用。你的任务是将一段源代码中所有注释过滤掉。在本过滤注释系统中,你可以忽略源文件中双引号导致“//”、“/*”、“*/”失去作用的情况,即只要“//”、“/*”、“*/”不是注释内容,在任何情况下都起作用。

输入格式:

若干行,为一段待处理的C语言源代码。测试用例保证该段代码的最后一个字符为‘$’,且输入中只包含这一个‘$’。该字符为输入结束标志,不是源代码中的内容。

输出格式:

若干行,为去除注释的C代码。

输入样例:

/*
        @Author: BUPT
        @Date: 2010 8 26
*/
#include<stdio.h>
int main()
{
        int a = 10 , b = 2 , c ;
        c = a / b ; //I just want to test '/'
        printf("I love programming C.\n") ; //"printf" is a useful function /*
        printf("I hope you love it too!\n") ;
        /*
        //C is not always hard , if you love it , it will not treat you rough.
        */
        return 0 ;
}
$

输出样例:


#include<stdio.h>
int main()
{
        int a = 10 , b = 2 , c ;
        c = a / b ; 
        printf("I love programming C.\n") ; 
        printf("I hope you love it too!\n") ;
        
        return 0 ;
}

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include<stdio.h>
#define START 0
#define q3 3
#define q4 4
#define q1 1
#define q2 2
int main()
{
	int state=START;
	char str;
	scanf("%c",&str);
	while(str!='$'){
		switch(state){
			case START:if(str=='/') state=q1;
			           else printf("%c",str);break;
			case q1:if(str=='*') state=q2;
			        else if(str=='/') state=q3;
			        else{printf("/%c",str);state=START;}break;
			case q2:if(str!='*') state=q2;
			        else state=q4;break;
			case q3:if(str!='\n') state=q3;
			        else {printf("\n");state=START;}break;
			case q4:if(str=='/') state=START;
			        else if(str=='*') state=q4;
			        else state=q2;break;
		}
		scanf("%c",&str);
	}
	return 0;
}

文章来源:https://blog.csdn.net/a16487256/article/details/135748198
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。