简易英汉词典 下载本文

//}}AFX_MSG

DECLARE_MESSAGE_MAP() };

表2 CAboutDlg类说明表

名称 DicObject m_EDIT1 m_EDIT2 M_hIcon 属性 数据成员 数据成员 数据成员 数据成员 说明 创建词典类的一个实例 存放单词的字符变量 存放单词的字符变量 创建Icon类的一个实例 声明消息 进行数据交换 构造函数 对话框函数 系统命令函数 重绘函数 回调函数 按钮行为方法 按钮行为方法 按钮行为方法 DECLARE_MESSAGE_MAP() 成员方法 成员发法 DoDataExchange() CDictionDlg () OnInitDialog() OnSysCommand() Onpaint() OnQueryDragIcon() OnInsertButton1() OnInsertButton2() OnInsertButton3() 成员方法 成员方法 成员方法 成员方法 成员方法 成员方法 成员方法 成员方法 5、特色算法分析 在函数或成员方法里找出你认为比较有特色的1~2个算法。

1. Search_Seq方法

顺序查询算法,找到则返回在数组中的相应位置。

功能:英汉词典单词的检索和匹配,采用数组形式的数据结构进行存储单词和意思,根据顺序查询算法,找到则返回在数组中的相应位置,结束查询操作。本函数将作为Button 1和Button 3所调用的行为和判断,在Button 1中主要是用来进行相关的判断,即Search_Seq(DicObject,m_EDIT1)是否为零,若查询结果为零说明找不到相应的单词,此时进行下一步的操作;在Button 3中主要作为被调用行为,即Search_Seq(DicObject,m_EDIT1)的值赋予所查单词在数组中的相应位置变量index。

算法思路:

(1)构造词典检索算法前分析如下: ? 词典检索算法的性能评价

? 时间复杂度 ? 空间复杂度 ? 检索方式

? 直接用词语检索

? 检索句子中某个位置开始的所有词 ? 检索句子中某个位置开始的最长词 ? 模糊检索 ? ……

? 增量式索引

- 15 -

? 两个问题

? 索引结构 ? 查找算法

? 一种索引结构可以对应不同的查找算法 (2)构造词典检索算法具体情形如下: ①词典顺序索引

②词典顺序索引的查找算法 ? 整词二分查找

? 时间复杂度O(log2N) ? 无法按前缀查找

? 改进的整词二分查找

? 时间复杂度O(log2N) ? 可以实现按前缀查找 流程图:

- 16 -

函数入口 接收词典类对象和待查询的单词 类对象数组首地址的单词成员初始化为待查询的单词 将类对象的数组长度赋给整型变量j 整型变量j自减1 j位置对应的单词是否跟待查询的单词一样? 是 返回j 函数出口

图5-1 顺序查询流程图

从流程图可以看出当j=0找到单词时返回值为零,即初始化的值,此时可以说明没有找到单词,因此区别有没找着单词在于返回值是否为零。

代码:

int Search_Seq(Dictionary DicObject,CString key) {//顺序查询算法,找到则返回在数组中的相应位置

DicObject.ArrayContent[0].WordStr=key; //否则返回0 for(int j=DicObject.length;DicObject.ArrayContent[j].WordStr!=key;--j); }

return j;

- 17 -

6、功能测试

下面通过查询单词、插入单词以及清除窗口显示内容进行测试。

图6-1 单词查询测试图

图6-2 单词窗口清除测试图

- 18 -