hdoj1073

几点收获:
1.gets能读取回车,但是它会自动把回车改为’\0′
2.gets不能读取空行(因为空行只有一个’\n’,gets()会把它变成’\0′,这样,字符串长度为0,相当于什么也没读到)
3.如何将两篇文章(也就是行数不定,且可能有空行)进行比较:将文章转成一个字符串,因为可能有空行,所以不能用gets(如果用gets,则一篇文章空行,一篇无空行,其他地方相同,转化成的字符串会完全相同),这时应当自己写一个会读取回车的函数,类似于gets(),但不会将’\n’转化为’\0′,这样就保证了有无空行是不同的(有空行会在转化成的字符串中有一个’\n’)

#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<string.h>
using namespace std;
void getline(char*s)
{
	int x=0;
	char c=getchar();
	while(c!='\n')
	{
		s[x++]=c;
		c=getchar();
	}
	s[x++]='\n';
	s[x]='\0';
	return;

}
int main()
{
	int t;
	scanf("%d",&t);
	getchar();
	while(t--)
	{
		char s[5003],s1[5003],s2[5003],ss1[5003],ss2[5003],c;
		int i=0,j=0,k;
		getline(s);
		getline(s);
		while(strcmp(s,"END\n")!=0)
		{
			int len=strlen(s);
			for(k=0;k<=len-1;k++)
			{
				ss1[j++]=s[k];
				if(s[k]!=' ' && s[k]!='\n' && s[k]!='\t')
					s1[i++]=s[k];
			}
			getline(s);
		}
		s1[i++]='\0';
		ss1[j++]='\0';
		getline(s);
		getline(s);
		i=0;
		j=0;
		while(strcmp(s,"END\n")!=0)
		{
			int len=strlen(s);
			for(k=0;k<=len-1;k++)
			{
				ss2[j++]=s[k];
				if(s[k]!=' ' && s[k]!='\n' && s[k]!='\t')
					s2[i++]=s[k];
			}
			getline(s);
		}
		s2[i++]='\0';
		ss2[j++]='\0';
		string str1(s1);
		string str2(s2);
		string sstr1(ss1);
		string sstr2(ss2);
		if(str1==str2)
		{
			if(sstr1==sstr2)
				printf("Accepted\n");
			else
				printf("Presentation Error\n");
		}
		else
			printf("Wrong Answer\n");
		
	}
	//system("pause");
	return 0;
}

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>