Problem2133--删除注释(comment)

2133: 删除注释(comment)

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 256 MiB

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;

Source/Category