如何用c语言做一个简单的英语词典

如何用c语言做一个简单的英语词典,第1张

//新建一个字典文本文件,命名为:dict.dat,内容格式如下: 或下载一个也可

//abandon v.抛弃,放弃

//abandonment n.放弃

//abbreviation n.缩写

//abeyance n.缓办,中止

//abide v.遵守

//ability n.能力

//able adj.有能力的,能干的

//abnormal adj.反常的,变态的

//aboard adv.船(车)上

//abolish v.废除,取消

//******************************

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

struct NODE

{

char e[20]

char c[50]

struct NODE* pnext

}

struct NODE* pN

struct NODE* pHead=NULL

struct NODE* pNode=NULL

struct NODE* pNext=NULL

struct NODE* pEnd=NULL

FILE* open_dict()

{

FILE *fp

if((fp=fopen("dict.dat","r"))==NULL)

{

printf("open dict error!\n")

return NULL

}

return fp

}

int getdata_from_dict(FILE* fp)

{

int i,j

char buf[50]

while(1)

{

pN=(struct NODE*)malloc(sizeof(struct NODE))

memset(pN->c,'\0',50)

memset(pN->e,'\0',20)

pN->pnext=NULL

if(fgets(buf,50,fp)==NULL)

{

fclose(fp)

break

}

sscanf(buf,"%s %s",pN->e,pN->c)

if(pHead==NULL)

{

pHead=pN

pNode=pN

continue

}

pNode->pnext=pN

pNode=pN

pEnd=pN

}

return 1

}

void write_dict()

{

FILE* fp=NULL

if((fp=fopen("dict.dat","w"))==NULL)

{

printf("open dict error!\n")

return

}

char buf[100]={'\0'}

pNode=pHead

while(1)

{

if(pNode==NULL)

{

break

}

fprintf(fp,"%s %s\n",pNode->e,pNode->c)

pNode=pNode->pnext

}

fclose(fp)

}

void del(char* char_del)

{

struct NODE* pDel=pHead

if(strcmp(pDel->e,char_del)==0)

{

pHead=pHead->pnext

write_dict()

return 

}

while(1)

{

if(strcmp(pDel->pnext->e,char_del)==0)

{

if(pDel->pnext->pnext!=NULL)

{

pDel->pnext=pDel->pnext->pnext

}

else

{

pDel->pnext=NULL

}

write_dict()

return 

}

else

{

pDel=pDel->pnext

if(pDel==NULL)

{

break

}

}

}

printf("\n未找到该单词!\n")

return

}

void add(char* char_add, char* char_add_chs)

{

pN=(struct NODE*)malloc(sizeof(struct NODE))

memset(pN->c,'\0',50)

memset(pN->e,'\0',20)

pN->pnext=NULL

strcpy(pN->e,char_add)

strcpy(pN->c,char_add_chs)

pEnd->pnext=pN

pEnd=pN

pNode=pN

write_dict()

}

int main(int argc, char *argv[]) 

{

FILE* fp=NULL

fp=open_dict()

if(fp==NULL)

{

printf("读取字典失败! 程序将退出!")

getchar()

return 1

}

getdata_from_dict(fp)

fclose(fp)

char buf[50]={'\0'}

while(1)

{

printf("\n\n{输入quit: 即退出, 输入del: 即删除, 输入add: 即增加}\n请输入英文单词 : ")

fflush(stdin)

scanf("%s",buf)

if(strcmp(buf,"quit:")==0)

{

break

}

else if(strcmp(buf,"del:")==0)

{

char char_del[20]={'\0'}

printf("请输入要删除的单词:")

fflush(stdin)

scanf("%s",char_del)

del(char_del)

continue

}

else if(strcmp(buf,"add:")==0)

{

char char_add[20]={'\0'}

char char_add_chs[100]={'\0'}

printf("\n请输入要增加的单词:")

fflush(stdin)

scanf("%s",char_add)

printf("\n请输入中文意思:")

fflush(stdin)

scanf("%[^\n]",char_add_chs)

add(char_add,char_add_chs)

continue

}

pNode=pHead

int find=0

while(pNode!=NULL)

{

if(strcmp(pNode->e,buf)==0)

{

printf("\n%s",pNode->c)

find=1

break

}

pNode=pNode->pnext

}

if(find==0)

{

printf("\n未找到!")

}

}

return 0

}

// 词典.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <windows.h>#include <stdio.h>#include <malloc.h>#include <winbase.h>#include <process.h>void Search() void InsertItem() int main(int argc, char* argv[]) while(index<0||index>5)/*选择项不在0~4之间重输*/ switch(index) return 0} 输出: **************MENU*************** 1 英译汉 2 插入新的词条 3 清空屏幕 4 退出 ********************************** 请选择 *** 作(1~4): 1 请输入要查询的单词: bad adj. 劣质的,有害的,坏的,不利的,不健康的,严重的 **************MENU*************** 1 英译汉 2 插入新的词条 3 清空屏幕 4 退出 ********************************** 请选择 *** 作(1~4): 2 请输入要插入的单词: cat 请输入单词的解释: 猫 插入成功。 **************MENU*************** 1 英译汉 2 插入新的词条 3 清空屏幕 4 退出 ********************************** 请选择 *** 作(1~4): 1 请输入要查询的单词: cat 猫 **************MENU*************** 1 英译汉 2 插入新的词条 3 清空屏幕

如果帮助到您,请记得采纳为满意答案哈,谢谢!祝您生活愉快! vae.la

用多级链表把单词读到内存中,最好是按字母顺序,第一层就按字母a-z,每个字母存一个节点,下面一层用单链表存单词(可以试试按字母的多少,分别建单独的链表,这样可以提高检索的效率吧)。图片随便画的,大概就这么个意思吧。希望对你有帮助。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12146363.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存