我们先从最简单的开始,即只有两个单词的词典。

1 原始版本

新建一个translation.c的文件,内容如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>typedef struct _dict {      //一个单词对应一个结构char english[256];char chinese[256];
} Dict;Dict* dict_init() {//hello  你好//world  世界Dict* dict = (Dict*)malloc(sizeof(Dict) * 2);strcpy(dict[0].english, "hello");               //字符串复制strcpy(dict[0].chinese, "你好");strcpy(dict[1].english, "world");strcpy(dict[1].chinese, "世界");return dict;
}void search(Dict* dict, char* english, int n)
{for (int i = 0; i < n; i++){if (strcmp(dict[i].english, english) == 0){printf("OK!The Chinese word is:%s", dict[i].chinese);printf("\n");return ;}}printf("There is no %s\n", english);
}void translate() {Dict* dict = dict_init();int ret = 0;char english[256];while (1){printf("Please Enter the world you want to search:");fgets(english, sizeof(english), stdin);english[strlen(english) - 1] = 0;printf("%s\n", english);search(dict, english, 2);}free(dict);
}

新建一个main.c的文件,内容如下:

int main()
{translate();return 0;
}

main函数没啥好讲的,主要就是translation.c,它先定义了一个结构体类型,包含了中英文数组,接下来就是字典初始化函数dict_init、查找函数search、翻译函数translation

2 内存优化版

上面的代码有比较严重的资源浪费,因为每个单词都给分配256个字节,假如字典里有两万个单词,则会占用巨大的内存空间,这里对这个问题进行优化,代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>typedef struct _dict {char * english;char * chinese;
} Dict;Dict* dict_init() {//hello  你好//world  世界Dict* dict = (Dict *)malloc(sizeof(Dict) * 2);char* p[] = { "hello" , "你好" , "world" , "世界" };int len = 0;for (int i = 0; i < 2; i++){len = strlen(p[i]);dict[i].english = (char*)malloc(len + 1);strcpy(dict[0].english, p[i]);len = strlen(p[i+1]);dict[i].chinese = (char*)malloc(len + 1);strcpy(dict[0].chinese, p[i+1]);}return dict;
}void search(Dict* dict, char* english, int n)
{for (int i = 0; i < n; i++){if (strcmp(dict[i].english, english) == 0){printf("OK!The Chinese word is:%s", dict[i].chinese);printf("\n");return;}}printf("There is no %s\n", english);
}void translate() {Dict* dict = dict_init();int ret = 0;char english[256];while (1){printf("Please Enter the world you want to search:");fgets(english, sizeof(english), stdin);english[strlen(english) - 1] = 0;printf("%s\n", english);search(dict, english, 2);}for (int i = 0; i < 2; i++){free(dict[i].chinese);free(dict[i].english);}free(dict);
}

这里结构体里面只定义字符指针,遇到单词,根据单词的长度分配内存。
这里要注意,最后释放内存的时候,不能单单释放dict,需要由内到外的顺序,否则会内存泄漏。

我们目前做的词典还比较原始,下一个练习将会制作一个包含十几万个单词的词典。

C语言综合练习4:快译通上相关推荐

  1. C语言综合练习5:快译通下

    1 词典文件介绍 前面建立的词典,只有两个单词,现在我们要建立一个上万个单词的词典,所有单词及其翻译都在一个名为dict.txt的文件(词典文件)中 每个单词有两行,其中一行是单词原文,下一行是对应的 ...

  2. 简单快译通英汉词典设计源码

    快译通英汉词典设计源码 项目需求分析 一.单词查询 给定文本文件"dict.txt",该文件用于存储词库.词库为"英-汉"词典,每个单词和其解释的格式固定,如下 ...

  3. 独家开发-快译通掌上词典-自建词典生成软件

    独家开发-快译通掌上词典-自建词典生成软件 快译通掌上词典--是一种性价比较高的电子词典工具!至少我觉得我选的V80N是不错的!但是一直以来只能使用快译通提供的内置词典和有限的几种附加词典,这让我觉得 ...

  4. c语言基础学习12_项目实战:快译通字典

    ============================================================================= ====================== ...

  5. 8.9 快译通项目设计

    第一阶段:设计结构体 struct WORD {      char *key;        //先测试单词长度,然后再malloc      int ntrans;       //记录单词解释个 ...

  6. 快译通项目dict.txt文件

    #a Trans:art. 一;字母A #a.m. Trans:n. 上午 #a/c Trans:n. 往来帐户@往来:come - and - go; contact; intercourse@n. ...

  7. 《中国商业银行数字化转型调查报告》发布,快商通声纹为银行赋能

    近日,由中国互联网金融协会.新华社瞭望智库联合撰写的<中国商业银行数字化转型调查研究报告>在北京发布. 调研报告显示,从总体情况看,我国商业银行数字化转型正在加速,主要采取加大转型投入力度 ...

  8. 21day学通python epub_21天就让你掌握Python语言,《21天学通Python》PDF版送给你去学...

    Python的学习书籍小编看过很多,但是这本<21天学通Python>真的是堪称极品! 本书的作者团队成员为一线开发工程师.资深编程专家或专业培训师,在编程开发方面有着丰富的经验,并已出版 ...

  9. ole2高级编程技术 pdf_21天快速掌握Python语言,《21天学通Python》PDF版送给你去学...

    Python的学习书籍小编看过很多,但是这本<21天学通Python>真的是堪称极品! 本书的作者团队成员为一线开发工程师.资深编程专家或专业培训师,在编程开发方面有着丰富的经验,并已出版 ...

最新文章

  1. 获取邮箱通讯录,msn好友列表的C#源码
  2. Eclipse Class Decompiler——Java反编译插件(转)
  3. dotNet中,取得指定日期所在月份的最后一天
  4. Python高效编程技巧
  5. R学习_multitaper包解析1:子函数centre,dpss
  6. pmp每日三题(2022年2月25日)
  7. 3w并发mysql架构_(DBA之路【一】)mysql 基本架构
  8. 前端学习(1832):前端面试题之跨域
  9. 线程安全单例最佳实践,C#中的Lazy是如何保证线程安全的
  10. github之关联远程仓库
  11. java计算机毕业设计工会会员管理系统MyBatis+系统+LW文档+源码+调试部署
  12. 领导力教练:世界著名企业教练们的实践心得(原书第3版)
  13. 阿里云上创建 对象存储oss
  14. 公众号管理系统 v1.0.0
  15. 【rf】robotframework自动化测试环境搭建
  16. django—APIView详细讲解
  17. 网页版google语音识别
  18. DELPHI 多线程同步几种方法
  19. 两个运放制作加法器_运放基础第10讲,加法器、减法器、积分器、微分器、仪表放大器...
  20. 使用Logger的正确姿势

热门文章

  1. 如何成为月入5W的 IT 人?
  2. Linux系统目录的管理
  3. 数据结构 拓扑排序、AOV 、AOE、关键路径
  4. 连网线DNS服务器没检测到有响应,DNS服务器未检测到响应怎么办?
  5. 解决win10桌面图标显示为白色方框
  6. 激活函数总结RELU,Leaky RELU
  7. 快速查找期刊名称缩写
  8. 微信小程序中如何获取用户手机号授权登录
  9. python爬虫豆瓣评论实验报告_用python实现豆瓣短评通用爬虫(登录、爬取、可视化分析)...
  10. Vmware VRA vRealize Automation 7 看不到Endpoint里的computer resource 故障排除