课程设计之电子辞典
代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int i,t,j;
FILE * p; //用于文件打开的指针
char a[8010][88]; //存放7989个英文和汉语,每个单词及其它的注释集中在一个串
char b[8010][88]; //仅存放英文单词(提取于a字符串)
char c[88],d; //存放待查找的英文单词
int first=1,last=7989,y; //用于二分查找的定位
if((p=fopen("dictionary.txt","r"))==NULL) //以仅读的方式开记录单词及其注释的文本文件
{
printf("not find the dictionary!\n");
exit;
}
printf("请输入需要查找的单词(0000结束):\n"); //输入提示
for(i=1;i<=7989;i++) //从文件中录入单词及其注释
fgets(a[i],80,p);
for(i=1;i<=7989;i++) //从a字符串中提取b字符串
{
j=0;
while(a[i][j]!=' ')
{
b[i][j]=a[i][j];
j++;
}
b[i][j]='\0';
}
while(1) //多次查找,通过循环内判断,break结束程序
{
scanf("%s",c); //从键盘获得待查找的单词
if(strcmp(c,"0000")==0) //判断输入,是否结束程序
break;
first=1,last=7989; //二分法开始
y=(first+last)/2;
while(1)
{
if(strcmp(c,b[y])==0) //找到该单词
{
printf("\""); //格式化输出
for(i=0;a[y][i]!='\0';i++)
{
if(a[y][i-1]==' '&&a[y][i]==' ')
continue;
printf("%c",a[y][i]);
if(a[y][i-1]!=' '&&a[y][i]==' '&&a[y][i+1]==' ')
printf("\"的中文意思是:");
}
break; //输出注释后即可结束该单词的查找
}
if(strcmp(c,b[y])>0) //如果待查找的单词与中间单词比较大,就查找后半部分
first=y+1;
else if(strcmp(c,b[y])<0) //如果待查找的单词与中间单词比较小,就查找后半部分
last=y-1;
y=(first+last)/2;
if(first>last) //如果寻找完成一遍且并没有找到单词,给出提示并结束高单词的查找
{
printf("词典中未找到这个单词!\n");
break;
}
}
}
fclose(p); //关闭文件
return 0;
}
注:
文件操作:(同一根目录下dictiona.txt,大约8000个单词)
测试运行: