课程设计之电子辞典

代码:

#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个单词)                   

测试运行:


猜你喜欢

转载自blog.csdn.net/qq_41170600/article/details/80214068
今日推荐