问题及代码
/*烟台大学计算机与控制工程学院
题目描述:电子词典。功能包括:
输入英语查找汉译以及词性
作者:展一
完成时间:2017年1月4日
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char English[8000][20],Chinese[8000][20];//储存从dictionary.txt中读取的单词以及中文翻译
int dichotomy(int first, int last, char *s);//二分法查找
int main( )
{
int m,first,last,index;
int word_num=0;//计算输入数组的单词总数
char seed[20];
printf(" 欢迎使用小博士英译汉双语词典\n");
FILE *fp;
fp = fopen("dictionary.txt","r");
if(fp==NULL)
{
printf("打开失败!请查看字典源文档所在位置!\n");
exit(1);
}
while(!feof(fp))//一直读到“空”,停止循环
{
fscanf(fp, "%s%s", English[word_num], Chinese[word_num]);//将dictionary.txt中读取的单词以及中文翻译输入到数组中
word_num++;
}
fclose(fp);
printf("请输入编号选择服务:\n");
printf("1:查询单词\n");
printf("2:退出\n");
scanf("%d",&m);
if(m==2)
{
printf("谢谢使用!");
}
else
{
do
{
printf("请输入要查的词:");
scanf("%s", seed);
first=0;
last=word_num-1;
index=dichotomy(first, last, seed);
if (index == -1)
printf("查无此词!\n\n");
else
printf("%s 的中文意思是:%s\n\n", seed, Chinese[index]);
printf("请输入编号选择服务:\n");
printf("1:查询单词\n");
printf("2:退出\n");
scanf("%d",&m);
if(m==2)
{
printf("谢谢使用!");
break;
}
else
{
printf("请输入要查的词:");
scanf("%s", seed);
int first=0,last=word_num-1;
int index=dichotomy(first, last, seed);
if (index == -1)
printf("查无此词!\n\n");
else
printf("%s 的中文意思是:%s\n\n", seed, Chinese[index]);
}
}while(1);
printf("欢迎再次使用!\n\n");
}
return 0;
}
/*************************************************************
功能描述:二分法查找单词……
输入参数:mid-二分法查找时的中间值,用以与所需查找值比较
first-二分法查找时最开始的值
last-二分法查找时最末的值
返 回 值:mid……
其他说明:当first>last时,搜索不到词汇,返回主函数
*************************************************************/
int dichotomy(int first, int last, char *s)//二分法快速查找单词
{
int mid;
while(first<=last)
{
mid=(first + last) / 2;
if(strcmp(English[mid],s)==0)
{
return mid;
}
if(strcmp(English[mid],s)>0)
last=mid-1;
else
first=mid+1;
}
return -1;//没有查到单词则返回index=-1
}
运行结果
测试数据1:
m:1 2
seed: cold
测试数据2:
m:1 2
seed:women