希望通过本文能让大家对C#如何快速获取助记码有更深刻的了解。
本文实现:
1、以牺牲空间为代价,方便快速地实现汉字的助记码获取。
2、针对拼音特性,实现多音字并提供显式地姓氏调用方法。
网上关于使用C#取助记码的方法很多,不过一般都是采用将每一个码有哪些汉字的方法来实现助记码的转换,它的缺点是显而易见的:
1、相当于本来应该存放在数据库或者是外部的数据存放到程序中;
2、利用字符串的定位功能,性能上也不一定好。
在线性表中我们查找指定位置结点的数据是最快的,比如一个包含10000个元素的线性表中,无论直接访问哪一个位置的数据值,只要根据表的第一个位置就可以直接定位到第9000个元素的位置,数组也是一种简单有效的线性表,需要某个项目,只要通过编移量即可搞定。
在不使用数据库,直接使用文件做资源,方便配置,完成中文到助记码的的转换,同时针对拼音助记码,还要实现:1.多音字词组匹配;2.姓氏专用方法。
同时五笔码、四角码等多种类别也易如反掌。虽然在以牺牲空间为代价,但用空间换得时间的性能提高,还是非常值得的。
数据存放使用数组
数组就是一种线性表,我们的解决思路是:
1、每一个项目对应一个结构,它包括汉字、拼音码、是否多音字、五笔码(或其它更多编码);
2、每一个汉字直接转换成一个数字编码(ASCII或者是UNICODE),数字就是数组下标;
3、读取文字串,根据每一个汉字取得数字,直接定位数组中的位置,取得编码。
因此我们定义用于存放汉字的助记简码的结构(有更多编码,只要在结构上扩充即可):
|
加载助记码字典
由于要支持拼音及多音字,也支持五笔的助记码,为了例子方便,编码表都暂时存放在d:\myword下,下面以拼音码的加载为例,首先初始化Itemword中的每一个项目,通常情况下GBK的实际汉字数应该在20000字左右,从双字节的角度来看,最多也就只有64K,因此把我们的数组定义为64K,即:
|
在函数fun_LoadWord中拼音码hzpy1.txt的加载方法:
|