/*
* 题目:英语词典。所有的单词存放在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
分享到:
相关推荐
C语言实现的词索引表程序:IndexBook。C语言实现按照索引插入并查找元素。严蔚敏建立词索引表:严蔚敏数据结构C语言实现,串操作应用举例中的词索引表例子,由于作者没给出完整源码,自己写了一个比较完整的。
HASH 索引——用C语言实现,让你充分了解DBMS中索引的实现
数据结构 数目索引 仅供初学者使用 C语言
C语言实现的倒排索引算法(含全部源码)
c语言的代码实现B+树。基于文件操作。模拟B+树的建立索引
(1)掌握顺序查找,二分法查找和索引查找的算法思想及程序实现方法。 (2)掌握二叉排序树、AVL树的查找、插入、删除、建立算法的思想及程序实现方法。 (3)掌握散列存储结构的思想,能选择合适散列函数,实现...
3种查找算法,顺序查找 折半查找 索引查找,c语言编写,可直接运行
可以利用此工具快速查找C语言函数相关内容
vsm的c语言实现 特征词典生成 倒排索引表生成 向量空间模型生成 打印第3个向量
C语言开发 BTREE 数据文件索引程序库
详细描述了如何利用C语言实现二级链表,第一级存储所有的26个字母,二级存储对应的单词都有详细的注释。
三、 输出:包含索引的文本文件,包括排序后的英文字典,英文出现次数,出现该英文的页码。 用例描述:将所提供的程序file1.exe和用例测试文件Christmas.txt同时放到D:\目录下然后执行exe文件可看到教师程序结果演示...
堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 堆排序的平均时间复杂度为Ο(nlogn) 。 算法步骤: 创建一个堆H[0..n-1] 把堆首(最大值)和堆尾...
在C语言中实现约瑟夫问题,可以使用数组来模拟这个过程。下面是一个C语言的实现示例: ```c #include void josephus(int n, int m) { int people[n]; // 创建一个数组来表示围成一圈的人 for (int i = 0; i ; i...
C语言关键字中英文对照索引[参考].pdf
数据结构课程设计,索引顺序查找,用c++做的~有源代码,任务书,报告,超全~~~
首先将存储在磁盘中的单词文本读入内存,再用归并排序法建立索引,运用二分查找来查找单词。对文本词库,我们还建立了二进制词库,用户可选择一种词库查找单词。若词库中没有要查的单词,用户可建立自己的词库,并...
算法:C语言实现 (第1-4部分)基础知识、数据结构、排序及搜索(原书第3版) 本书是Sedgewick彻底修订和重写的C算法系列的第一本。全书分为四部分,共16章。第一部分“基础知识”(第1—2章)介绍基本算法分析原理。...