字母重排(qsort)

 

 

 

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char dir[2000][7]={0},sorted[2000][7]={0}; //要求一个单词最多有6个字母,所以数组第二维应该是7,放'\0',所以可以稍微放大点,防止出错
char w[10]={0}; //虽然要求6个,这里养成多写一下点的习惯
int cmp_char(const void* _a,const void* _b)
{
char* a=(char*) _a;
char* b=(char*) _b;
return *a-*b;
}
int cmp_string(const void* _a,const void* _b)
{
char* a=(char*)_a;
char* b=(char*)_b;
return strcmp(a,b);
}

int main(void)
{
int i=0;
while(1)
{
scanf("%s",dir[i]);
if(strcmp(dir[i],"******")==0)
break;
i++;
}

int len=i;
qsort(dir,len,sizeof(dir[0]),cmp_string);

for(i=0;i<len;i++)
{
strcpy(sorted[i],dir[i]);
qsort(sorted[i],strlen(sorted[i]),sizeof(char),cmp_char);

}

while(1)
{
scanf("%s",w);
qsort(w,strlen(w),sizeof(char),cmp_char);
int found=0;//:(的标志
for(i=0;i<len;i++)
{
if(strcmp(w,sorted[i])==0)
{
found=1;
printf("%s ",dir[i]);
}
}
if(!found)
printf(":)");
printf("\n");
}

return 0;
}

posted @ 2014-10-17 13:43  f-r-a-n-k  阅读(213)  评论(0编辑  收藏  举报