=============================================================================
=============================================================================
涉及到的知识点有:
项目实战:做一个电子词典,快易通电子词典。
方案零:固定字典词条数目。(出现问题:多了的词条数解决不了,少了的词条数浪费内存。)
方案一:读2次文件,第一次读文件得到文件的词条数(每个循环读两行数据),第二次打开文件后根据文件实际的词条数来分配堆内存。
方案二:边读边随时增加struct dict在堆中的数量。
方案三:链表也可以实现。(基础班没有讲到哦!)
四种实现方案的效率比较
结构dict在内存中的分配说明图
=============================================================================
=============================================================================
08_dict.txt是个文本文件,汉字的格式是GBK格式的。
第一行
#a 代表一个词条。
第二行
Trans:art. 一;字母A 代表词条对应的翻译。
第三行
#a.m.
第四行
Trans:n. 上午
......
--------------------------------------
方案零:固定字典词条数目。
vs2017下示例代码:
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <string.h> 5 #include <time.h> 6 7 #define MAX 111111 //最大记录数 8 9 struct dict 10 { 11 char *key;//key代表词条,是普通的指针,不是数组,目前还不是字符串,只是char类型的指针变量。 12 char *content;//content代表词条的翻译,是普通的指针,不是数组,目前还不是字符串,只是char类型的指针变量。 13 }; 14 15 16 void format_string(char *str)//去掉字符串结尾的回车和空格字符 17 { 18 size_t i; 19 for(i = strlen(str) - 1; i >= 0; i--)//从右往左遍历字符串 20 { 21 if (str[i] != ' ' && str[i] != ' ' && str[i] != ' ') 22 { 23 str[i + 1] = '