做些题,练手。
问题出自:http://poj.org/problem?id=2503,Babelfish是yahoo!的一款在线翻译软件,估计原始问题出自这里。
题目很简单,实现一个字典来记录key、value,然后根据输入在字典中查找相应的含义。搜索问题,使用qsort()排序和 bsearch()搜索是一个比较常用的组合。接下来就用这种方法实现。另外字典也可以使用trie树,也是常见思路。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct DictNode
{
char key[32];
char value[32];
};
int comp_value(const void* a,const void* b)
{
return strcmp((char *)a, ((DictNode*)b)->value);
}
int comp(const void* a,const void* b)
{
return strcmp(((DictNode*)a)->value , ((DictNode*)b)->value);
}
int main()
{
char line[32], query[32];
int i = 0;
DictNode nodeArray[100000];
while(gets(line))
{
if(!strcmp(line,"")) break;
int k = strlen(line);
int j = 0;
for(j=0;j<k;j++)
{
if(line[j]==' ')
{
line[j]='\0';
break;
}
}
strcpy(nodeArray[i].key, line);
strcpy(nodeArray[i].value, line+j+1);
i++;
}
//sort dict data
qsort(nodeArray, i, sizeof(DictNode), comp);
while(gets(query))
{
//lookup dict
DictNode* node = (DictNode*)bsearch(query, nodeArray, i, sizeof(DictNode), comp_value);
if(node==NULL)
{
printf("eh\n");
}
else
{
printf("%s\n", node->key);
}
}
return 0;
}
参考:
http://poj.org/problem?id=2503
http://baike.baidu.com/view/653958.htm
http://baike.baidu.com/view/982231.htm