题目描述:
做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,
英文与释义间用’\t’隔开。编程序,将文件中的内容读到两个数组e[]和c[]中,分别代表英文和中文,
由用户输入英文词,显示中文意思。运行程序后,支持用户连续地查词典,直到输入“0000”结束,如图:
提示:文件中的词汇已经排序,故在查找时,用二分查找法提高效率。
编译的程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int binary_search(int first,int last ,char *word);//全局变量
char e[8000][20],c[8000][20];//全局变量,由文件中读入的英文和中文数组
int num=0;//词库中词汇的实际数目
int main()
{
char word[20];//要查询的词
//将文件中的数据读入到定义的数组中
FILE *fp;
fp=fopen("dictionary.txt","r");//用fopen函数,用输入的方式打开文件
if(fp==NULL)//判断文件存不存在
{
printf("error!cannot open dictionary.txt!\n");
printf("Please try again.\n");
exit(1);//函数库中提供的exit(1)结束程序的运行(exit函数是stdlib.h中提供的库函数,用来终止一个进程的执行,代表非正常结束
}
while(!feof(fp))//如果读取成功则重复读取
{
fscanf(fp,"%s %s",e[num],c[num]);
num++;
}
fclose(fp);//关闭读入的文件
do
{
printf("请输入要查的词(0000结束):");
scanf("%s",word);//输入要查询的关键词
if(strcmp(word,"0000")==0)//如果输入0000则退出
break;
else
{
int first=0,last=num-1;//初始化
int index=binary_search(first,last,word);//将binary_search的返回值赋值给index
if(index==-1)
printf("抱歉,没有找到您所要查询的单词!\n\n");
else
printf("%s的中文意思是:%s",word,c[index]);
}
}
while(1);//1为真,无限循环
printf("谢谢您的使用!再见\n\n");
return 0;
}
//二分查找法,返回的是数组中的下标
int binary_search(int first,int last,char *w)
{
int mid;//定义控制查找范围的变量并赋初值
while(first<=last)
{
mid=(first+last)/2;//取中间位置
//比较要查的词与中间位置的关系
if(strcmp(e[mid],w)==0)
{
//记录位置
return mid;//返回查找到的值
}
else if(strcmp(e[mid],w)>0)
last=mid-1;//在前半段找
else
first=mid+1;//在后半段找
}
return -1;//如果first>last则无法寻找
}
运行结果: