/***************************************************
输入参数:keyword-等待查询的单词
返回值:mid查到位置,返回位置mid
说明:定义指向文件的指针,
排着读入每个单词,存入数组e[],c[]中
****************************************************/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char e[8000][10],c[8000][10]; //英文和中文数组,要由文件中读入
int _num=0; //词库中实际的词汇条数
int Binary_Seareh(int low, int high, char *k);
int main( )
{
int low=0,high; //定义区间上下限
char keyword[10]; //查询关键词
//将文件中的数据读入到对象数组中
FILE *fp;
fp = fopen("dictionary.txt","r"); //以输入的方式打开文件
if(fp==NULL) //测试是否成功打开
{
printf("open error!\n");
exit(1);
}
while(!feof(fp)) //读取成功,则重复从文件中读
{
fscanf(fp,"%s%s",e[_num],c[_num]);
++_num;
}
fclose(fp);
do
{
printf("请输入要查的词:(输入N退出)");
scanf("%s", keyword);
if (strcmp(keyword,"N")==0)
break;
else
{
high=_num-1;
int index=Binary_Seareh(low, high, keyword);
if (index == -1)
printf("查无此词!\n\n");
else
printf("%s 的中文意思是:%s\n\n", keyword, c[index]);
}
}
while(1);//输入单词进行查询
printf("欢迎再次使用!\n\n");
return 0;
}
//二分查找,结果为所查词在数组中的下标
int Binary_Seareh(int low, int high, char *k)
{
int mid;
while(low<=high)
{
mid=(low + high) / 2;
if(strcmp(e[mid],k)==0)
{
return mid; //查找成功返回
}
if(strcmp(e[mid],k)>0)
high=mid-1; //继续在e[low..mid-1]中查找
else
low=mid+1; //继续在e[mid+1..high]中查找
}
return -1;
}
运行结果: