#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Dic
{
char el[11];
char fl[11];
}Dic;
Dic dic[100001];
int q_cmp( const void *a ,const void *b)
{
return (strcmp( (*(Dic *)a).fl, (*(Dic *)b).fl));
}
int b_cmp( const void *a , const void *b)
{
return (strcmp( (char *)a, (*(Dic *)b).fl));
}
int main(int argc, char *argv[])
{
Dic * p ;
char doc[11],tmp[30];
int i,k;
k = 0 ;
memset(dic, 0 , sizeof(Dic)*100001);
memset(doc, 0 , sizeof(char)*11);
while(1)
{
gets(tmp);
if(tmp[0]=='\0')
break;
else
{
sscanf(tmp, "%s%s",dic[k++].el , dic[k].fl);
//sscanf(tmp, "%s%s",dic[k].el , dic[k++].fl);
//出错原因在于:scanf、sscanf、printf都是右编译,从右往前执行的!!
}
}
qsort(dic, 100001, sizeof(dic[0]), q_cmp);
while(scanf("%s",doc)!=EOF)
{
p = NULL ;
p = (Dic *)bsearch(doc, dic, 100001 , sizeof(dic[0]), b_cmp);
if(p)
{
printf("%s\n",p->el);
}
else printf("eh\n");
}
system("PAUSE");
return 0;
}
学习了一个新函数sscanf的用法,从字符串中读取字符串,但是该函数是右编译的,所以k++的操作要写在左边的数组中,否则就错了……这个错误好难发现,多谢达哥!
qsort和bsearch结合使用,注意比较函数的写法。