Problem I: 去注释
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 110 Solved: 45
[Submit][Status][Web Board]
Description
给你一段C++代码,将其中的注释去除后输出剩余的代码。
注释共有两种形式:
1. 行注视:以//开头,一直作用到行尾为止。
例子:
int n;//n表示数据规模
int a;
去注释后:
int n;
int a;
注意:保留行尾换行符
2. 段注视:以/*开头,到*//结尾,中间部分都是注释,可以跨行。
例子:
int main() {
/*
我是
一段
注释
*/
}
去注释后:
int main() {
}
注意:由于在线评测系统(Online Judge)对网页显示文本作了格式化,一些空行会被删去,导致上面显示的删除后的结果不正确。删除注释后,剩余的代码应该是三行,两行代码之间有一个空 行。这是因为:在段注释结尾符的后面有一个换行符,它不在注释内,需要保留。
Input
一段C++程序代码
Output
去掉注释部分后的程序
Sample Input
int main() {
/*
我是 一段 注释
*/
int n;//n表示数据规模
}
Sample Output
int main() {
int n;
}
题目大意:
要求输入一段有注释的代码,将注释去掉后输出。
想法:
本题首先要解决的问题是如何让字符串读入回车,首先我们要定义一个字符串string s,然后用getline(cin,s[k])的方式输入即可。
注释分两种:// 和 /* */,每次碰到‘ / ‘都要判断下一个字符是什么,第一种需要从//到行尾都去掉,第二种需要把从/*到*/都去掉,要注意的是*/之后如果有回车是不能去掉的,这样去除注释以后应该要有一个空行。注意到这个问题再注意一下细节就可以顺利ac了。
AC代码:
#include<bits/stdc++.h>
using namespace std;
string s[10000];
int main(){
int k = 0;
while (getline(cin,s[k])){
k++;
}
for (int i = 0; i<k; i++){
int len = s[i].length();
for (int j = 0; j<len; j++){
if (s[i][j] == '/' && s[i][j+1] == '/'){
s[i].erase(j,len-j);
break;
}
if (s[i][j] == '/'&&s[i][j+1] == '*'){
for (int w = i+1; w<k; w++){
int flag = 0;
for (int q = 0; q<s[w].length(); q++){
if (s[w][q] == '*' && s[w][q+1] == '/'){
i += w-i;
s[w].erase(0,s[w].length());
flag = 1;
break;
}
if (flag == 1){
break;
}
}
}
}
}
cout<<s[i]<<endl;
}
return 0;
}