Problem B: 删除嵌套注释
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 8 Solved: 7
[ Submit][ Status][ Web Board]
Description
大家在C语言课程当中一定接触过注释。注释主要是用来表明程序用意的,不作为程序编译的一部分。C语言当中使用“/*”和“*/”来标记注释的。“/*”和“*/”之间的部分可以标注当前程序的用意,例如以下C语言程序:
/*将要定义一个整数*/
int i;
然而,注释当中是不可以嵌套注释的,例如以下程序所用到的注释就是非法的:
/*将要定义一个整数/*这个整数是用来作为计数器的*/*/
int i;
Input
一段写好的程序,其中可能含有注释的嵌套。(为简单起见,测试数据中不包含空行。)注释一律独立成行(也就是说一行当中不同时包含需要编译的代码和注释,也不会同时包含多余一个的完整注释),例如以下两个代码是不出现的:
情况1
int a = 0; /*定义*/
情况2
int a = 0; /*/*非法*/注释*/ /*合法注释*/
现在给你一段写好的程序,请你开发一个新的编译辅助工具将其中非法的注释整个删除。
Output
删除非法注释后的代码。
Sample Input
#include <stdio.h>
int main()
{
/*int a;
/*printf("%d",&a);*/*/
return 0;
/*返回*/
}
Sample Output
#include <stdio.h>
int main()
{
return 0;
/*返回*/
}
HINT
这一题,最主要的在于判断:
1.如何停止的问题:既然他们都单独成行,所以停止的标志是'}'!
2.怎么单独得到一行:一行结束的标志是'\n',得到'\n'停止就可以了!
3.如何判断是不是嵌套注释:这里我是遇到'/'或者'*'都作标记,遇到则加一,只有这个数为0(表示没有注释)或者4(表示只有一个注释)
#include<stdio.h>
#include<string.h>
int main()
{
char c,a[100],i=0,j=0,k;
while(scanf("%c",&c))
{
if(c!='}')
{
if(c!='\n')
{
a[i++]=c;
if(c=='/'||c=='*')
{
j++;
}
}
else
{
if(j==4||j==0)
{
for(k=0;k<i;k++)
{
printf("%c",a[k]);
}
printf("\n");
}
i=j=0;
}
}
else
{
printf("}\n");
break;
}
}
}