2133: 删除注释(comment)
[Creator : ]
Description
小C在完成C++程序后,需要最终文件尽可能小,就要删除注释。手动删除太缓慢了,所以我们考虑一下将这些注释部分全部删除。请你编写一个自动删除注释功能的程序帮助小C。
注释说明如下:
① C++ 注释有两种风格:行注释和块注释;
② 字符串“//” 表示行注释:即“//”和其右侧的其余全部字符被忽略;
③ 字符串“/*” 表示块注释:即“/*”和右侧之后直到“*/”(非重叠)之间出现的所有字符被忽略。阅读顺序为从左到右,非重叠是指字符串“/*/”并没有结束块注释,因为注释的结尾与开头相重叠;
④ 第一个有效注释优先于其他注释:如果字符串//出现在块注释中会被忽略,字符串“/*”出现在行或块注释中也会被忽略;
⑤ 如果一行在删除注释之后无有效字符,那么不要输出该行;
⑥ 代码中没有双引号内有注释语句的情况。比如“string s = “/* Not a comment. */”;” 的情况不考虑,此外也没有其他内容,如定义或宏会干扰注释;
⑦ 代码中也没有一行出现多个块注释的情况;
⑧ 数据保证每一个块注释最终都会被闭合,
所以在行或块注释之外的/*总是开始新的注释;
⑨ 其它时候需要以相同的格式返回内容。
Input
多行文本。行数与每行内的字符串长度均≤300,每行行首可能有空格,需要考虑空格问题。
Output
删除符合条件的注释后的文本。
Sample Input Copy
样例输入1
/*Test program */
#include<iostream>
using namespace std;
int main()
{
// variable declaration /*: ;
long long a;
/* This is a test
cout << a; */
cin >> a;
long long b;
cin >>b;
cout << a + b << endl;
return 0;
}
样例输入2
/*/declare members; */ok;
Sample Output Copy
样例输出1
#include<iostream>
using namespace std;
int main()
{
long long a;
cin >> a;
long long b;
cin >>b;
cout << a + b << endl;
return 0;
}
样例输出2
ok;