用c语言做一个词典

来源:互联网 发布:天翼合伙人软件 编辑:程序博客网 时间:2024/06/08 17:39

这是一个简单的实现了英文单词查询的词典,把词库放在VS的工程目录下(放在别的地方也可以,打开的时候改一下路径就好了)

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<Windows.h>//以后更换词库直接更改这里即可//#define FILE_NAME dictionary.txt//之所以将单词数定义为宏常量是为了以后更改方便#define SUM 8000//定义一个结构体用来存放每条单词的信息typedef struct {    char english[25];    char chinese[50];    char my_class[20];}words;//这里定义一个结构体数组是为了将硬盘中的词库加载到内存上,提高查找速度words library[SUM] = { 0 };int number = 0;int binary_find(const char *English){    int low = 0;    int high = SUM - 1;    int mid = 0;    while (low <= high)    {        mid = low + ((high - low) >> 1);        if (strcmp(English, library[mid].english) < 0)        {            high = mid - 1;        }        else if (strcmp(English, library[mid].english) > 0)        {            low = mid + 1;        }        else if (strcmp(English, library[mid].english) == 0)        {            return mid;        }        /*else        return -1;   //假如把return -1放在这里,就会返回一个最接近匹配单词的单词,所以会避开匹配失败这种情况        */    }    return -1;}void find_print(char *English){    int key = -1;    key = binary_find(English);    if (key == -1)    {        printf("%s not found!\n", English);    }    else    {        printf("%s %s %s\n", library[key].english,        library[key].chinese,        library[key].my_class);    }}void print_menu(void){printf("\n*************************************************\n");printf("****       这是一个简易但是有用的词典       *****\n");printf("*****     ->   你有以下两个选择:  <-      *******\n");printf("*******        1>    查询单词           *********\n");printf("********       2>    退出程序         ***********\n");printf("*************************************************\n");}int main(void){    char English[25] = { 0 };    FILE *fp = fopen("dictionary.txt", "r");//很好奇为什么这里用宏替换文件名就会打开失败--> fopen("FILE_NAME","r")    int choice = 0;    if (fp == NULL)    {        perror("file");        exit(1);    }    while (!feof(fp)){        fscanf(fp, "%s%s%s",        library[number].english,        library[number].chinese,        library[number].my_class);        number++;    }    while (1)    {        system("cls");        print_menu();        printf("\n输入你的选择:>");        scanf("%d", &choice);        fflush(stdin);        if (2 == choice)        {            exit(1);        }        else        {            printf("请输入你要查询的单词:>");            scanf("%s", English);            fflush(stdin);            find_print(English);            system("pause");            //printf("请输入你要查询的单词:>");            //scanf("%s", English);            //fflush(stdin);            //find_print(English);        }        fclose(fp);    }    return 0;}

实现这个词典的方法是TDD
PS:请广大网友转载请指明出处

阅读全文
0 0
原创粉丝点击