返回:賀老師課程教學連結
【項目2-電子詞典】
做一個簡單的電子詞典。在檔案 dictionary.txt中,儲存的是英漢對照的一個詞典,詞彙量近8000個,英文與釋義間用’\t’隔開。編程式,將檔案中的內容讀到兩個數組e[]和c[]中,分別代表英文和中文,由使用者輸入英文詞,顯示中文意思。運行程式後,支援使用者連續地查詞典,直到輸入“0000”結束,如圖:
提示:檔案中的詞彙已經排序,故在尋找時,用二分尋找法提高效率。
[參考解答]
#include<stdio.h>#include<string.h>#include<stdlib.h>char e[8000][20],c[8000][20]; //英文和中文數組,要由檔案中讀入int wordsNum=0; //詞庫中實際的詞彙條數int BinSeareh(int low, int high, char *k);int main( ){ char key[20]; //查詢關鍵詞 //將檔案中的資料讀入到對象數組中 FILE *fp; fp = fopen("dictionary.txt","r"); //以輸入的方式開啟檔案 if(fp==NULL) //測試是否成功開啟 { printf("open error!\n"); exit(1); } while(!feof(fp)) //讀取成功,則重複從檔案中讀 { fscanf(fp, "%s%s", e[wordsNum], c[wordsNum]); ++wordsNum; } fclose(fp); //輸入待查關鍵詞並用二分尋找法進行查詢 do { printf("請輸入要查的詞(0000結束):"); scanf("%s", key); if (strcmp(key,"0000")==0) break; else { int low=0,high=wordsNum-1; //置當前尋找區間上、下界的初值 int index=BinSeareh(low, high, key); if (index == -1) printf("查無此詞。\n\n"); else printf("%s 的中文意思是:%s\n\n", key, c[index]); } } while(1); printf("歡迎再次使用。\n\n"); return 0;}//二分尋找,結果為所查詞在數組中的下標int BinSeareh(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; //當low>high時表示尋找區間為空白,尋找失敗}