题目大意:
给定一个自定义的字典集,再给出几个单词,通过比较(不区分单词各字母的顺序),若相同,则输出字典集中的对应单词,有多个则输出多个(注意若有多个单词时,按照单词首字母从小到大输出)
解题思路:
用二位数组存放字典集中的各个单词,对于给出单词逐个与字典集中的单词进行比较,在比较的过程中,需要先将字典集的单词先按首字母从小到大排序,并按备份到另一二维数组中。再对字典集中的各单词以及给出的单词,按照字母从小到大分别进行排序,这时,再将给出的单词与排序了的字典集进行比较,若有相同的则记录字典集中该单词的数组下标,并输出该下标在备份数组中对应的单词
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
char a[102][10];
char b[102][10];
char c[10];
int cmp1(const void *a,const void *b)
{
return (*(char *)a-*(char *)b);
}
int cmp2(const void *a,const void *b)
{
return (strcmp((char*)a,(char*)b));
}
void Print(int n)
{
int i,y=0,k=1;
char x[102][10];
for(i=1;i<=n;i++)
{
if(strcmp(c,b[i])==0)
{
y=1;
strcpy(x[k++],a[i]);
}
}
if(y)
{
qsort(x+1,k-1,sizeof(x[1]),cmp2);
for(i=1;i<=k-1;i++)
printf("%s\n",x[i]);
}
else
printf("NOT A VALID WORD\n");
}
int main()
{
int i,len,n;
for(i=1;;i++)
{
scanf("%s",a[i]);
if(strcmp(a[i],"XXXXXX")==0)
break;
strcpy(b[i],a[i]);
len=strlen(b[i]);
qsort(b[i],len,sizeof(b[i][0]),cmp1);
}
n=i-1;
while(scanf("%s",c)!=EOF)
{
if(strcmp(c,"XXXXXX")==0)
break;
len=strlen(c);
qsort(c,len,sizeof(c[0]),cmp1);
Print(n);
printf("******\n");
}
system("pause");
return 0;
}