`
Touch_2011
  • 浏览: 290495 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

索引查找之英语词典(C语言实现)

阅读更多

/*
 * 题目:英语词典。所有的单词存放在dictionary.txt中。输入一个英文单词,在词典中查找这个单词,
 *       若找到显示这个单词的中文意思,显示此单词不存在。
 * 思路:以字母顺序建立索引表。
 *
 */

 

/*
 * 题目:英语词典。所有的单词存放在dictionary.txt中。输入一个英文单词,在词典中查找这个单词,
 *       若找到显示这个单词的中文意思,显示此单词不存在。
 * 思路:以字母顺序建立索引表。
 *
 */

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX_LENGTH 26 //索引表最大长度
#define WORD_LENGTH 20 //单词最大长度

//单词
typedef struct Word
{
	char English[WORD_LENGTH];
	char Chinese[WORD_LENGTH];
	struct Word *next;
}Word,*PWordList;

//索引项
typedef struct 
{
	char ch;        //索引值
	PWordList pWord;//指向单词链表
}Index;


Index indexTable[MAX_LENGTH];  //索引表
int length;                    //索引表长度

//二分查找法查找索引表,若找到返回下标,查找失败,返回要插入的位置
int binarySearch(char ch,int low,int high)
{
	int mid=(low+high)/2;
	if(low>high)
		return low;
    if(indexTable[mid].ch==ch)
		return mid;
	else if(indexTable[mid].ch>ch)
		binarySearch(ch,low,mid-1);
	else
    	binarySearch(ch,mid+1,high);
}

//从文件中读入单词,建立字典
void createDictionary()
{
	FILE *fp;
	char str[WORD_LENGTH*3];
	PWordList Pword=0;
	int i,j,m=0,index;

	if((fp=fopen("document/dictionary.txt","r"))==NULL){
		printf("can not open file!\n");
		exit(0);
	}

	while(!feof(fp)){
        Pword=(PWordList)malloc(sizeof(Word));
    	i=j=m=0;
        fgets(str,WORD_LENGTH*3,fp);
        while(str[i]!='\n'){
    		if(m==0){
	    		if(str[i]==' '){
	    			m=1;
		    		Pword->English[j]='\0';
		    		j=0;
				}else{
					if(str[i]>='A'&&str[i]<='Z')
						str[i]+=32;
                    Pword->English[j++]=str[i];
				}
			}
    		if(m==1){
                if(str[i]!=' ')
    				Pword->Chinese[j++]=str[i];
			}
	    	i++;
		}
		Pword->Chinese[j]='\0';

		//取单词的首字母,查找索引表,若存在,把这个单词插入这个索引指向的分组中,不存在,则插入索引和单词
        index=binarySearch(Pword->English[0],0,length-1);
        if(indexTable[index].ch==Pword->English[0]){//查到该索引
             Pword->next=indexTable[index].pWord;
			 indexTable[index].pWord=Pword;
		}else{//查找失败
             for(i=length;i>=index;i--)
                 indexTable[i+1]=indexTable[i];  
			 length++;
			 indexTable[index].ch=Pword->English[0];
			 Pword->next=NULL;
			 indexTable[index].pWord=Pword;
		}
			 
	//	printf("%-10s%-10s\n",word.English,word.Chinese);
	}

	if(fclose(fp)){
		printf("can not close file!\n");
		exit(0);
	}
}

//查找单词,不成功返回NULL,成功返回这个单词
PWordList search(char *word)
{
	int i=0,index;
	PWordList p=0;
	PWordList pWord=NULL;
	while(word[i]){
		if(word[i]>='A'&&word[i]<='Z')
			word[i]+=32;
		i++;
	}
    index=binarySearch(word[0],0,length-1);
    if(indexTable[index].ch==word[0]){//查到该索引
		p=indexTable[index].pWord;
        while(p){
			if(strcmp(p->English,word)==0){
                pWord=(PWordList)malloc(sizeof(Word));
				strcpy(pWord->Chinese,p->Chinese);
				strcpy(pWord->English,p->English);
				pWord->next=NULL;
				break;
			}
			p=p->next;
		}
	}
	return pWord;
}

void main()
{
	PWordList p=0;
	char word[WORD_LENGTH];
    createDictionary();
	printf("请输入要查找的单词:\n");
    gets(word);
	p=search(word);
	if(p){
		printf("找到该单词:\n%-20s%-20s\n",p->English,p->Chinese);
		free(p);
	}else
		printf("你查找的单词不存在!\n");

}

 

  • 大小: 18.2 KB
0
0
分享到:
评论

相关推荐

    c语言实现电子辞典的排序查找

    在本文中,我们将探讨如何使用C语言实现电子辞典的排序和查找功能。首先,我们需要理解这两个基本的算法——冒泡排序和二分查找。 **冒泡排序**是一种简单的排序算法,它重复地遍历待排序的单词列表,一次比较两个...

    C语言课程设计英语词典排版系统.zip

    在本项目中,"C语言课程设计英语词典排版系统.zip" 提供了一个使用C语言编写的英语词典排版系统的源代码和相关文档。这个项目旨在帮助学生加深对C语言的理解,同时掌握如何构建实用的文本处理软件。下面我们将详细...

    基于C语言的电子词典设计

    首先将存储在磁盘中的单词文本读入内存,再用归并排序法建立索引,运用二分查找来查找单词。对文本词库,我们还建立了二进制词库,用户可选择一种词库查找单词。若词库中没有要查的单词,用户可建立自己的词库,并...

    C语言_英译汉词典(源码+效果图+使用说明).zip

    标题中的"C语言_英译汉词典(源码+效果图+使用说明).zip"表明这是一个基于C语言的项目,其主要功能是实现一个英译汉词典。这个项目可能是大学《高级语言程序设计》课程的期末设计任务,旨在让学生实践C语言编程,...

    C语言实现散列表(哈希Hash表)实例详解

    本文将详细介绍C语言实现散列表(哈希Hash表)的实例详解,包括散列表的初始化、插入、查找和显示等操作。 一、散列表的初始化 在C语言中,我们可以使用结构体来实现散列表。首先,我们需要定义散列表的结构体,...

    经典的LZW算法----C语言实现.txt

    ### LZW算法C语言实现详解 #### 一、概述 LZW(Lempel-Ziv-Welch)算法是一种广泛使用的无损数据压缩算法。它最初由Abraham Lempel和Jacob Ziv在1977年提出,并由Terry Welch在1984年进一步改进和完善。该算法的...

    英文电子词典

    【英文电子词典】是一种便携式的学习工具,主要用于帮助用户快速查找和理解英语单词及其用法。在本文中,我们将深入探讨这个话题,聚焦于它背后的编程语言——C语言,以及数据库技术在构建这样的应用中的重要性。 ...

    c语言面试题之哈希表赎金信.zip

    首先,哈希表的基本原理是利用散列函数将键转化为数组的索引,从而实现以O(1)的时间复杂度进行查找、插入和删除操作。在赎金信问题中,可能涉及如何高效地查找两个字符串中不重复字符的情况。 这个问题可以这样理解...

    c语言课程设计——单词背诵系统

    本项目“单词背诵系统”是针对初学者设计的一个课程设计项目,旨在帮助学习者通过实践提升C语言编程技能,同时结合英语学习,实现一个实用的单词记忆工具。 这个系统的设计目标是模仿电子词典中的单词背诵功能,...

    LZW.c.zip_C语言_LZW编码

    2. `encode`函数:实现了LZW编码,包括查找匹配、发送代码和更新词典的过程。 3. `decode`函数:解码过程,根据编码流恢复原始数据。 4. `main`函数:处理输入输出,调用编码和解码函数。 编码和解码过程中,可能...

    Python倒排索引之查找包含某主题或单词的文件

    倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。...

    cidian.zip_电子词典

    这个项目的核心是利用C语言编程来实现50个不同的电子词典查询功能,这意味着我们需要深入理解C语言的基础以及如何设计和实现一个词典查询系统。 C语言是一种强大的、底层的编程语言,它的效率高且灵活性强,适合...

    在线电子词典

    为了快速查找单词,可能还需要实现一种索引机制,例如哈希表或二叉搜索树。 2. **用户接口**:电子词典需要提供一个用户友好的界面,让用户输入单词并显示结果。这可能涉及标准输入输出(如`scanf()`和`printf()`)...

    在线词典代码

    在本项目中,可能实现了客户端与服务器之间的信息交互,例如用户查询单词时,客户端会发送请求到服务器,服务器接收到请求后查找词典数据,然后将结果返回给客户端。这个过程涉及到IP地址、端口号、协议(如TCP/IP)...

    英汉汉英词典

    在这个词典项目中,C语言被用来实现词典的核心功能,如查找、存储和处理词汇信息。 2. **数据结构**:数据结构是组织和管理大量数据的方式,它决定了程序的效率和可扩展性。在这个词典应用中,可能使用了链表、数组...

    简易的搜索引擎(libcurl实现)

    本项目"简易的搜索引擎(libcurl实现)"采用C语言编程,利用libcurl库来实现网页抓取,进而构建一个基础的搜索系统。libcurl是一个强大的库,主要用于在不同协议下进行文件传输,包括HTTP、HTTPS等,非常适合用于...

    C与C++电子词典项目.rar

    - **数据结构与算法**:在设计词汇索引和搜索算法时,可能涉及到了哈希表、二分查找等数据结构和算法。 - **用户界面设计**:采用GUI(图形用户界面)工具包,如Qt或wxWidgets,创建用户友好的交互界面。 - **错误...

Global site tag (gtag.js) - Google Analytics