题目:  

  五笔的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把五笔的编码按字典序排序,形成一个数组如下:a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, yyyw, yyyx, yyyy。其中a的Index为0,aa的Index为1,aaa的Index为2,以此类推。

  1)编写一个函数,输入是任意一个编码,比如baca,输出这个编码对应的Index; 
  2)编写一个函数,输入是任意一个Index,比如12345,输出这个Index对应的编码。

  注意到:如果都是4字符的定长串的话,很简单,就是25进制的一个表示法,但这里是不定长的。

  1、观察头几个串:a->0, aa->1, aaa->2,aaaa->3。应该可以看出来,这里的索引就是:字符串长度-1;

  2、已知a的索引,求b的索引:因为a到b之间隔了以下四种情况的字符串:a后跟1字符的串有25个(aa,ab,...ay),a后跟2字符的串有25*25个(aaa, aab, ... ayy),a后面跟3字符的串有25*25*25个(aaaa,aaab,...ayyy),然后才是b,所以b的索引 = a的索引 + 25+25*25+25*25*25 + 1,加1是因为b排在a和中间的字符之后1个;

  3、已知aa的索引,求ab的索引:同理,ab的索引 = aa索引 + 25 + 25* 25 + 1;

  4、已知aaa的索引,求aab的索引:同理,aab的索引 = aaa索引 + 25 + 1;

  5、已知aaaa的索引,求aaab的索引 = aaaa索引 + 1。

  至于aaaa,aaa,aa, a的索引由1: 可归纳为 字符串长度-1。

  所以:可用一个权重数组来表示修正后的进制:factor[4] = {1+25+25*25+25*25*25, 1+25+25*25, 1+25, 1}

  然后字符串string的索引函数为:index(string) = (string.length - 1) + sum[ factor[i] * (string[i] - 'a') ,  {i, 0, string.length-1 } ]

  其中sum是对内部表达式求和。

  举例:求cdef索引号过程

  c_index = a_index + ('c'-'a')*(25*25*25+1) = 0 + 2*factor[0]

  ca_index = c_index + 1

  cd_index = ca_index + ('d'-'a')*(25*25+1) = 2*factor[0]+1 + 3*factor[1]

  cda_index = cd_index + 1

  cde_index = cda_index+('e'-'a')*(25+1) = 2*factor[0]+1 + 3*factor[1]+1 + 4*factor[2]

  cdea_index = cde_index + 1

  cdef_index = cdea_index+('f'-'a') = 2*factor[0]+1 + 3*factor[1]+1 + 4*factor[2]+1 + 5*factor[3]

  程序参考:

int factor[]={25*25*25+25*25+25+1,25*25+25+1,25+1,1};
int encode(char *str)
{int len=strlen(str);int index=len-1;for(int i=0;i<len;++i){index+=factor[i]*(str[i]-'a');}return index;
}

  解码过程就是编码过程的逆过程,有了factor数组,就简单多了。

int factor[]={25*25*25+25*25+25+1,25*25+25+1,25+1,1};
char* decode(int index)
{char str[4];int i=0;while(index>=0){str[i]='a'+index/factor[i];index=index%factor[i];--index;++i;}str[i]='\0';return str;
}

摘录自:

http://blog.csdn.net/jiangnanyouzi/article/details/6827534

http://www.cnblogs.com/daniagger/archive/2012/07/20/2600581.html

转载于:https://www.cnblogs.com/budapeng/p/3298163.html

【转】五笔的字典序编码与解码相关推荐

  1. 五笔的字典序编码与解码

    假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下: a, aa, aaa, aaaa, aaab, aaac, - -, b, ba, ...

  2. ibus五笔造词、删词功能

    本文转载至:http://forum.ubuntu.org.cn/viewtopic.php?t=353240 一年前,我曾问系统自带的ibus五笔86能否自定义词组?结果280的浏览量,只有2个回复 ...

  3. 学习五笔之我见[转]

    首先说下现在的状态:原来用了多年的拼音,灌水速度最快可以达到120字/分,为了切身了解五笔和拼音的各种争议,抱着实践和求知的想法来学五笔的.经过接近三个月地用五笔,现在是打单字,看着屏幕打文章的速度是 ...

  4. 算法:五笔编码,如何根据输入的词条自动生成输入编码

    算法:五笔编码,如何根据输入的词条自动生成输入编码 一.想要实现的 最近做的一个五笔码表工具,想要实现根据用户输入的词条自动生成输入编码. 比如: 输入 我们 生成 trwu 输入 五笔基础知识 生成 ...

  5. 水鱼五笔编码练习系统

    水鱼五笔编码练习系统是我大三时的一个课程设计作品,因我小时候就学会了五笔, 再之身边会五笔的人没几个,想学五笔的人又没有简单.有效的五笔练习软件可以拿来用, 这让我萌生了写一款五笔练习软件的想法.个人 ...

  6. 【原创】生成五笔编码

    生成五笔编码 最近在修改项目中汉字生成五笔编码的问题.很多的生僻字无法生成对应的五笔编码.查找了很多资料,终于找到这个非常齐全的编码表.总共20902个汉字,包括汉字与对应的全拼.五笔.郑码.UNIC ...

  7. 五笔编码查询工具(念青字库) 新增快捷键 | #hta #五笔 #javascript

    前段时间写的五笔编码查询,最近又增加了快捷键: [list] [*]'/'键定位到输入框 [*]'Esc'键定离开推入框 [/list] 看图说话: [img]http://dl.iteye.com/ ...

  8. 计算机五笔字型编码方法,无字型五笔编码计算机中文输入法

    主权项: 1.一种计算机中文键盘输入形码编码输入法,使用计算机通用西文键盘,选取汉字\r\r\r\r\n字根,对字根分组,将字根分组定义在西文键盘的不同键位上,构成中文键盘:其字编\r\r\r\r\n ...

  9. “乙”的五笔编码为什么是nnl

    N是乙的字根,再N是折的识别码.最后其实有两个L,它是单笔字的识别码. 又如:"一"字的全码是GGLL 补充: 五笔中,有五个笔划是特殊的.那就是代表五笔的横.竖.撇.捺.折.这五 ...

最新文章

  1. 动真格!因为论文!138名研究生丧失学位申请资格,导师也被罚……
  2. WINDOWS XP常用的快捷键组合?
  3. 零基础也可以实现“机器同传翻译”!
  4. Thinkphp中Auth认证
  5. Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)
  6. Oracle 11g ora 15018,oracle 11gR2 RAC root.sh 错误 ORA-15072 ORA-15018
  7. java_函数的概述
  8. VC学习笔记:简单绘图
  9. 仰空以忧繁星,我将君心聆听,我听君心似水清,清冷好似寒冰
  10. java坦克大战案例_java坦克大战
  11. Redis命令之scan、sscan、hscan、zcan
  12. Linux中安装tree命令
  13. 使用Java的JNI调用C
  14. [BZOJ4173]数学
  15. 亚马逊、速卖通、Shopee阿里国际站、mercari、沃尔玛、newegg、美客多等跨境平台卖家如何有效结合测评,补单打破瓶颈
  16. 编写高效 TS 代码的一些建议
  17. Qt软件开发交流群分享
  18. iOS-----GitHub上比较齐全的iOS 工具和App
  19. 漫威电影和程序员、Git 到底有什么关系?
  20. Python语言程序设计基础 第二版(嵩天著)课后答案第四章

热门文章

  1. mysql的3个排名函数
  2. figma:按组导出
  3. photoshop学习笔记之分辨率与色彩模式介绍
  4. 拒绝“Xcode-Ghost门”,如何安全快速下载Xcode?
  5. 智慧医疗卫生信息化解决方案
  6. 【报告分享】中国医药电商市场专题分析2021-易观智库(附下载)
  7. Android自定义相机拍的照片不清楚解决方案
  8. 当产品追溯遇上区块链
  9. 关于防重复提交出现 页面过期的问题
  10. Linux更换yum源