这是一个简单的实现了英文单词查询的词典,把词库放在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(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:请广大网友转载请指明出处