Skip to content

Latest commit

 

History

History
113 lines (64 loc) · 4.14 KB

File metadata and controls

113 lines (64 loc) · 4.14 KB

时间限制: 1.0 秒

空间限制: 512 MB

相关文件: 题目目录

题目背景

wangyurzee7和Yazid是好朋友。

题目描述

wangyurzee7是一个繁忙的工作者,他每天都要写很多有趣的代码。

Yazid开了一家有趣的公司,wangyurzee7当上了有趣的公司的项目经理。这家公司给码农们结算工资的方式也十分有趣,每个人的薪水正比于所写代码的长度。不过很快,有趣的码农们学会了使用长长的变量名、大括号换行、增加长长的注释、tab换成空格等等方法,这让Yazid头疼不已。

有一天,wangyurzee7收到了Yazid的一个任务:在这个月结算工资之前,写一个脚本把程序中所有的注释全部去掉,再将所有的函数名、变量名替换成单个字母,然后再进行统计代码长度。

这个任务非常简单,但wangyurzee7实在是太弱了,他只在github上找到了批量替换函数名的轮子,而没有找到去掉注释和替换变量名的轮子,而且这个代码看起来不是那么有趣,wangyurzee7写不动。

Yazid勃然大怒,他根本没想到这么简单的任务wangyurzee7都不能胜任。他把wangyurzee7狠狠地批判了一番。

当然啦,责任还是要由wangyurzee7来承担。无奈之下,他只好退而求其次,只需要针对**C/C++**代码,去掉里面的注释就向Yazid交差:

  1. 单行注释//:一旦出现,并且被C/C++编译器认为是注释,那么从//符号开始到行末都被算作注释,比如下面程序的//233就会被算作注释:
#include <cstdio>
int main()
{
	printf("//");//233
	return 0;
}

并且如果单行注释最末尾的可见字符为\字符,则下一行从行初到行末均被认为是注释。

  1. 多行注释/* */:一旦出现,并且被C/C++编译器认为是注释,那么从/*符号开始到*/符号结束都被算作注释,比如下面程序的1~4行就会被算作注释:
/* Welcome to THUSCU2017!
 * This is the easiest problem!
 * \\\\\\\puts("\\\\\\\/**\///////");///////
 *///
int main(/**//**/){return!printf("%d",'//');}
  1. 注释的处理方法:对于每个注释,将从注释的开始一直到注释的结束的字符串,替换成一个空格,其他地方的代码不允许做任何改动。将处理完的代码输出即可。比如上面的两段代码会变成下面这样(第一份代码第四行最末尾有一个空格,第二份代码第一行有两个空格):
-------------------------------------
#include <cstdio>
int main()
{
	printf("//"); 
	return 0;
}
-------------------------------------
  
int main(  ){return!printf("%d",'//');}
-------------------------------------

既然要做的东西变少了,问题也就变得更简单了。请你帮帮可怜的wangyurzee7解决这个问题。

输入格式

从标准输入读入数据。

输入有若干行,每一个测试样例都是一个能够在C/C++编译器下编译运行的代码,里面包含了若干注释。

输出格式

输出到标准输出。

输出经过删除注释,并在原位置替换空格过后的C/C++代码。

样例1

见题目目录下的 1.in1.ans

样例2

见题目目录下的 2.in2.ans

样例3

见题目目录下的 3.in3.ans

子任务

对于$30%$的数据,保证只有单行注释//,但是并不保证不跨行。

对于另外$40%$的数据,保证只有多行注释/* */,但是并不保证不跨行。

存在$30%$的数据,保证注释没有跨行情况。

对于$100%$的数据,保证代码总长度不超过20KB,所有字符都是常用可见字符或者空格、tab、换行符,并且不含ASCII标准之外的字符(如中文、拓展ASCII表等等),所有测试数据中的程序均可用C/C++编译器编译运行。保证以字符#作用的行(包含include、宏定义相关语句)中,引号成对出现,并且不包含以\结尾的单行注释;单行注释若出现跨行情况,必定是\字符之后紧跟换行符。

请注意考虑各种字符串情况,诸如:

  1. 字符串转义:"/*\"//*/"

  2. 字符常量:'//"'