关闭

详解C#如何快速获取助记码

发表于:2012-3-19 09:54

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:妖精总比想象多    来源:51Testing软件测试网采编

  希望通过本文能让大家对C#如何快速获取助记码有更深刻的了解。

  本文实现:

  1、以牺牲空间为代价,方便快速地实现汉字的助记码获取。

  2、针对拼音特性,实现多音字并提供显式地姓氏调用方法。

  网上关于使用C#取助记码的方法很多,不过一般都是采用将每一个码有哪些汉字的方法来实现助记码的转换,它的缺点是显而易见的:

  1、相当于本来应该存放在数据库或者是外部的数据存放到程序中;

  2、利用字符串的定位功能,性能上也不一定好。

  在线性表中我们查找指定位置结点的数据是最快的,比如一个包含10000个元素的线性表中,无论直接访问哪一个位置的数据值,只要根据表的第一个位置就可以直接定位到第9000个元素的位置,数组也是一种简单有效的线性表,需要某个项目,只要通过编移量即可搞定。

  在不使用数据库,直接使用文件做资源,方便配置,完成中文到助记码的的转换,同时针对拼音助记码,还要实现:1.多音字词组匹配;2.姓氏专用方法。

  同时五笔码、四角码等多种类别也易如反掌。虽然在以牺牲空间为代价,但用空间换得时间的性能提高,还是非常值得的。

  数据存放使用数组

  数组就是一种线性表,我们的解决思路是:

  1、每一个项目对应一个结构,它包括汉字、拼音码、是否多音字、五笔码(或其它更多编码);

  2、每一个汉字直接转换成一个数字编码(ASCII或者是UNICODE),数字就是数组下标;

  3、读取文字串,根据每一个汉字取得数字,直接定位数组中的位置,取得编码。

  因此我们定义用于存放汉字的助记简码的结构(有更多编码,只要在结构上扩充即可):

  1. private struct ItemWord{  
  2. public int numFlag; //是否多音字 
  3. public char strWord;//当前单词 
  4. public string strSpell1;//输入码 
  5. public string strSpell2;//输入码 
  6. public string strExt; //多音字保留串 
  7. public string strName;//用于定义姓氏码

  加载助记码字典

  由于要支持拼音及多音字,也支持五笔的助记码,为了例子方便,编码表都暂时存放在d:\myword下,下面以拼音码的加载为例,首先初始化Itemword中的每一个项目,通常情况下GBK的实际汉字数应该在20000字左右,从双字节的角度来看,最多也就只有64K,因此把我们的数组定义为64K,即:

  1. private static readonly int INTMAX = 65536;  
  2. private ItemWord[] stWord = new ItemWord[INTMAX];

  在函数fun_LoadWord中拼音码hzpy1.txt的加载方法:

  1. while ((strInput = srFile.ReadLine()) != null){  
  2. chrWord = strInput.ToCharArray();  
  3. numIndex = (int)chrWord[0];  
  4. stWord[numIndex].strWord = chrWord[0];  
  5. stWord[numIndex].strSpell1 = chrWord[2].ToString();

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号