1、非常诡异的代码,原来是RE,过了半个小时交就AC了。
2、原来注意到了题目中虽然单词最多5000个,但是会有重复,于是小心翼翼把数组开到6000,想怎么着也不会重复那么多次吧。BUT,我错了。看了网上别人的经验,要开到100000才AC,想想也是,一篇文章,光a/an就重复好多次了。
3、关键之处是将a复制到s时要先判断a是不是空串,否则WA。
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
char a[300]="",s[100000][300]={""};
int ch,i=0,j=0;
int cmp_string(void*_a,void*_b);
int main(void)
{
/*freopen("a.txt","r",stdin);*/
while((ch=getchar())!=EOF)
{
ch=tolower(ch);
if(!isalpha(ch))
{
a[j]='\0';
if(a[0]!='\0')
strcpy(s[i++],a);
memset(a,'\0',sizeof(a));
j=0;
}
else
a[j++]=(char)ch;
}
qsort(s,i,sizeof(s[0]),cmp_string);
printf("%s\n",s[0]);
for(j=1;j<i;j++)
if(strcmp(s[j],s[j-1])!=0)
printf("%s\n",s[j]);
return 0;
}
int cmp_string(void*_a,void*_b)
{
char*a=(char*)_a;
char*b=(char*)_b;
return strcmp(a,b);
}