您的位置:首页 > 其它

POJ2503 Babelfish

2014-08-12 09:42 288 查看
做些题,练手。

问题出自: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: