问题描述:给定一个自定义的字典集,再给出几个单词,通过比较(不区分单词各字母的顺序),若相同,则输出字典集中的对应单词,有多个则输出多个(注意若有多个单词时,按照单词首字母从小到大输出)
解题思路:用二位数组存放字典集中的各个单词,对于给出单词逐个与字典集中的单词进行比较,在比较的过程中,需要先将字典集的单词先按首字母从小到大排序,并按备份到另一二维数组中。再对字典集中的各单词以及给出的单词,按照字母从小到大分别进行排序,这时,再将给出的单词与排序了的字典集进行比较,若有相同的则记录字典集中该单词的数组下标,并输出该下标在备份数组中对应的单词。
code(C)
#include<stdio.h>
#include<string.h>
char w[105][10];//字典序
char s[105][10];
char a[10];//输入单词
int x; //x表示字典序中的总单词个数
void sort(char *s){
char t;
int i,j;
int l=strlen(s);
for(i=0;i<l-1;i++)
for(j=i+1;j<l;j++)
if(s[i]>s[j])
{t=s[i]; s[i]=s[j]; s[j]=t;}
}
void readdate(){
int n;
for(n=0;n<110;n++){
gets(w[n]);
if(!strcmp(w[n],"XXXXXX")){
x=n;
break;
}
}
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int i;
readdate();
for(i=0;i<x-1;i++){
for(int j=i+1;j<x;j++){
if(strcmp(w[i],w[j])==1){
char b[10];
strcpy(b,w[i]);
strcpy(w[i],w[j]);
strcpy(w[j],b);
}
}
}
for(i=0;i<x;i++)
strcpy(s[i],w[i]);
for(i=0;i<x;i++)
sort(w[i]);
while(1)
{
memset(a,'\0',10);
scanf("%s",a);
if(strcmp(a,"XXXXXX")==0)
return 0;
sort(a);
int flag=1;
for(i=0;i<x;i++){
if(!strcmp(a,w[i])){
flag=0;
puts(s[i]);
}
}
if(flag)
printf("NOT A VALID WORD\n");
printf("******\n");
}
//fclose(stdin);
//fclose(stdout);
}