/*===================================== 单词排序 总时间限制:1000ms 内存限制: 65536kB 描述 输入一行单词序列,相邻单词之间由1个或多个空格间隔,请按照字母顺序输出这些单词(即按照字符串中字母的ASCII码排序,区分大小写,当首字母相同时,比较第2个字母,依次类推),要求重复的单词只输出一次。 输入 一行单词序列,最少1个单词,最多100个单词,每个单词长度不超过50,单词之间用至少1个空格间隔。 输出 按字母顺序输出这些单词,重复的单词只输出一次。 样例输入 She wants to go to Peking University to study Chinese 样例输出 Chinese Peking She University go study to wants 思路:
依次输入单词,用scanf函数即可。
每次输入一个单词后立即检查前面输入的所有单词当中是否含有该新出现的单词。若是没有则把它存到数组当中,否则忽略该新输入的单词。
输入所有单词后,对数组排序,排序时比较两个单词的方法用strcmp进行。
拍好序后输出所有单词即可。 ======================================*/
1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 int i,k; 6 char a[100][50],temp[50]; 7 int n; 8 int flag,j; 9 freopen("5.in","r",stdin); 10 k=0;//表示现在为止已经往a数组放了k个单词 11 while(scanf("%s",temp)!=EOF) 12 { 13 flag=1;//flag==1表示a数组没含有刚输入的单词temp[] 14 for(i=0;i<k;i++)//检查a数组是否含有刚刚输入的单词temp[] 15 { 16 if(strcmp(a[i],temp)==0) 17 { 18 flag=0;//flag==0表示刚输入的单词temp[]已经包含在数组a里面 19 break; 20 } 21 } 22 if(flag==1) 23 { 24 strcpy(a[k],temp); 25 k++; 26 } 27 } 28 //下面是对数组a做选择排序 29 n=k; 30 for(i=0;i<n-1;i++) 31 { 32 k=i; 33 for(j=i+1;j<n;j++) //寻找a[i+1]~a[n-1]当中最小的元素并把它的下标记录到k里面。 34 if(strcmp(a[j],a[k])<0)//if(a[j] < a[k]) 35 k=j; 36 if(i!=k) 37 { 38 strcpy(temp,a[k]); 39 strcpy(a[k],a[i]); 40 strcpy(a[i],temp); 41 } 42 } 43 //下面输出排好序的a数组 44 for(i=0;i<n;i++) 45 { 46 printf("%s\n",a[i]); 47 } 48 return 0; 49 }