課程設計之電子辭典

代碼:

#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個單詞)                   

測試運行:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章