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;
}