用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;
	}

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

  • 85
    点赞
  • 276
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值