用c语言做一个词典

用c语言做一个词典

这是一个简单的实现了英文单词查询的词典,把词库放在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;
}

————————————————
版权声明:本文为CSDN博主「暂代」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zanda_/article/details/78732318

发布了19 篇原创文章 · 获赞 3 · 访问量 2461
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览