字母重排

題目描述:輸入一個字典(用******結尾),然後再輸入若干單詞,每輸入一個單詞w,你都需要在字典中找出所有可以用w的字母重排後得到的單詞,並按照字典序從小到大的順序在一行中輸出(如果不存在,輸出:()。輸入單詞之間用空格或空行隔開,且所有輸入單詞都由不超過6個小寫字母組成。注意,字典中的單詞不一定按字典排序。

樣例輸入:tarp given score only trap work earn course pepper part

    ******

   resco nfudre aptr sett oresuc

樣例輸出:

score

refund

part tarp trap

:(

course

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 1000
char word[2000][10],sorted[2000][10];
//字符比較函數
int cmp_char(const void *a,const void *b)
{
char *x=(char *)a;
char *y=(char *)b;
return *x-*y;
}
//字符串比較函數
int cmp_string(const void *a,const void *b)
{
char *x=(char *)a;
char *y=(char *)b;
return strcmp(x,y);

int main()
{
int n=0;
for(;;){
scanf("%s",word[n]);
if(word[n][0]=='*') break;
n++;
}
qsort(word,n,sizeof(word[0]),cmp_string);//給所有單詞排序 

for(int i=0;i<n;i++){
strcpy(sorted[i],word[i]);
qsort(sorted[i],strlen(sorted[i]),sizeof(char),cmp_char);//給每個單詞排序 
}
char s[10];
while(scanf("%s",s)==1){
qsort(s,strlen(s),sizeof(char),cmp_char);
int found=0;
for(int i=0;i<n;i++){
if(strcmp(sorted[i],s)==0){
found=1;
printf("%s ",word[i]); 
}
}
if(!found) printf(":(");
printf("\n");
}


return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章