请问杭电acm1073我的代码为什么是WA?跟例子的输入输出是一样的啊

2025-01-05 05:02:12
推荐回答(1个)
回答1:

你的cin.getline(data,5015,'D'); 和 cin.getline(input,5015,'D'); 用的是有问题的,虽然你本意是想让程序读到“END”中的‘D’时停止,但由于在“START”和“END”中的数据部分也可能出现'D'(例子中没有但例子只是一部分的数据,一个正确的程序要考虑所有可能),这种情况下你的程序不能读入所有的数据部分,肯定就错了。一种解决办法是用getline(cin, data)逐行读,再利用字符串加法得到完整的数据部分。

我帮你修改后的程序如下:

#include
#include
using namespace std;
int main()
{
int t,i;
string s1,s2;
string data,input;
scanf("%d",&t);
getchar(); //过滤掉数字后的回车字符,防止后面多读一行
while(t--)
{
data = input = "";
while(getline(cin,s1) && s1!="END")
{
if (s1=="") //处理空行,下同
data+='\n';
data+=s1;
}
while(getline(cin,s2) && s2!="END")
{
if (s2=="")
input+='\n';
input+=s2;
}
if(data==input)
{
printf("Accepted\n");continue;
}
s1=s2="";
for(i=5;i if(data[i]!='\t'&&data[i]!='\n'&&data[i]!=' ')
s1+=data[i];
for(i=5;i if(input[i]!='\t'&&input[i]!='\n'&&input[i]!=' ')
s2+=input[i];
if(s1!=s2)printf("Wrong Answer\n");
else printf("Presentation Error\n");
}
return 0;
}