Copyright (c) 2016,
烟台大学计算机与控制学院 All ringts reserved.
文件名称:电子词典
作 者:王兴振
完成日期:2016年1月5日
版 本 号:未知
烟台大学计算机与控制学院 All ringts reserved.
文件名称:电子词典
作 者:王兴振
完成日期:2016年1月5日
版 本 号:未知
题目描述:
做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文
与释义间用’\t’隔开。编程序,将文件中的内容读到两个数组e[]和c[]中,分别代表英文和中文,由用户输入
英文词,显示中文意思。运行程序后,支持用户连续地查词典,直到输入“0000”结束,如图:
输 入:
要查找的英文字母。
输 出:
英文的汉语意思,没有则显示查无此词。
样例输入:
dog
样例输出:
n.狗
提 示:
文件中的词汇已经排序,故在查找时,用二分查找法提高效率。
答 案:
/*************************************************************
功能描述:为歌手大奖赛计分
输入参数:i-单词数量。
e,c-英文数组,对应英文数组。
fp-文件指针。
mid,low,high-中值,低限,高限。
返 回 值:单词对应汉语。
其他说明:无
*************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int f(char *a);
int i;//单词个数。
char e[8011][20],c[8011][20];//全局变量,保存英文和对应汉语。
int main()
{
int x;
FILE *fp;//文件指针
if((fp=fopen("book.txt", "r"))==NULL)
{
printf("文件打开失败!");
exit(0);
}//判断文件打开是否成功。
char a[20];
for(i=0; (feof(fp)==0); i++)
{
fscanf(fp,"%s%s", e[i],c[i]);
}
while(1)
{
printf("请输入要查找的词(输入0000退出):");
gets(a);
if(strcmp(a,"0000")==0)
break;
x=f(a);
if(x==-9)
printf("查无此词!\n");
else
printf("%s的中文意思是:%s\n", a,c[x]);
}
return 0;
}
int f(char *a)//二分查找。
{
int high=i-1,low=0,mid;
while(low<=high)
{
mid=(low+high)/2;
if(strcmp(a,e[mid])==0)
return mid;
if(strcmp(a,e[mid])>0)
low=mid+1;
if(strcmp(a,e[mid])<0)
high=mid-1;
}
return -9;
}