当前位置: 代码迷 >> 综合 >> uva-10815 - Andy's First Dictionary
  详细解决方案

uva-10815 - Andy's First Dictionary

热度:62   发布时间:2023-12-19 11:46:03.0

这道题目也不难,就是把一大段字符串。分割成一个个的单词。然后排序,输出。

排序的时候我一开始用的是简单排序法,结果超时了,后来才知道是用的qsort排序。

定义数组的时候应该定义大点,至少为100000,应为题目虽然说是最多有5000个单词,但是,有好多单词是重复的,

所以,数组小了,就肯定会RE的。

#include<stdio.h>
#include<string.h>#include <stdlib.h>
char s[100010][210]={'\0'};
int cmp(const void* _a,const void* _b)
{char* a= (char*)_a;char* b= (char*)_b;return strcmp(a,b);}
int main()
{int n,i,c,leap,j;char ch,s1[201];int t=-1;leap=0;c=0;while((ch=getchar())!=EOF){if(ch>='A'&&ch<='Z')ch=ch+'a'-'A';if(!(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')){if(c!=0)s[t][c]='\0';leap=1;c=0;}elseleap=0;if(leap==0){if(c==0)t++;s[t][c]=ch;c++;}if(c!=0)s[t][c]='\0';}qsort(s,t+1,sizeof(s[0]),cmp);printf("%s\n",s[0]);for(i=1;i<=t;i++){if(strcmp(s[i],s[i-1])==0)continue;printf("%s\n",s[i]);}return 0;
}