电话号码对应单词1

一、题目基本描述

电话的号码盘一般可以用于输入字母。如用2可以输入ABC,用3可以输入DEF等。我们平时用电话发短信时,正是利用了这样的特性。例如,在拼音输入法条件下,如果要输入“你”这个字,要依次按下“6”与“4”(分别代表N与I)。当我们按下“6”与“4”后,一般的手机除了NI的拼音组合外,还会显示MI的拼音组合:这是由于6既可以代表N,又可以代表M。而MI又是合理的拼音结构。同样得到显示的还有NG(读“嗯”):虽然这并不是常用的拼音。值得一提的是,一种好的手机输入法会将这三种拼音方法按NI、MI、NG的顺序排列。这种排列并不是没有道理的:在我们发短信时,用到的NI组合最多,MI次之,而NG最少。进一步,对于手机来说,“联想功能”对我们输入短信也很有帮助:例如,在输入了“96”后,一个智能手机不只显示出了“WO”——“我”的拼音,同时显示的还有“YO”与“ZO”。虽然后两者不符合一般的拼音规则,但确是一些符合规则的拼音的前半部分:例如,“ZO”就是“ZOU”与“ZONG”的前半部分。同时,这种输入还要求有一定的容错功能,如连续输入3个“3”时,系统会报告错误(虽然这可能不会反映在手机的界面上),这是由于没有任何一个拼音组合可以用3个“3”代表。现在,希望开发一个具有类似功能的软件,能够实现上述的类似功能。与上面功能不同的是,在这里需要大家开发一般性的输入系统——不只是基于汉语拼音的输入。这个系统的框架如下:图1:系统框架词典、查询文件以及输出结果文件的格式将在下面详细说明。

二、解题思路本次大作业主要考察同学使用线性表、树或者Hash表等数据结构及查找相关算法解决问题的能力,同时锻炼同学按照函数接口编写完整程序的能力。

三、接口定义及输出格式要求 1、程序接口参数定义整个程序的主函数用 main(argc,argv)实现参数传递。学生程序根据该字符串读取码本文件路径、查询文件路径和输出结果文件路径等参数。格式如下: C://dict.txt? C://query.txt C://res.txt 也就是要求学生程序可以在命令行中运行,并且可以接收上面的参数,如下图所示:其中可执行文件后的第一个文件是码本文件及路径,第二个文件是记录要查询的电话号码文件及路径,第三个文件则是记录程序执行结果的输出文件及路径。注意:为了统一批改,本次大作业的工程名一律为 SearchWord。为了防止各种诡异错误,建议输入输出文件使用完整的绝对路径。 2、码本文件格式每次测试都将给出一个词典(eg, codebook.txt),每个词典包含以下信息: A 25 ABILITY 1 ABOUT 1 ADDED 1 AFFLUENT 1 …… 词典中的条目按每行一条的顺序排列。词典共由两列组成,第一列为词条,第二列为对应的每个词条的频度得分,得分越高的词条出现的概率越大。词典中所有的字母都是用大写表示的。每个词条的字符数最多不会超过25个(含25个)。一行的字符数最多不会超过30个(含30个)——注意,一个制表符/t是一个字符。注意:词条在文件中的先后顺序没有任何意义,词条与得分之间用“空格”或(与)“/t”组成的串分隔;词条之间用回车分隔;词典的最后一行不为空行。 3、查询文件格式每次测试将同时给出一个查询文件,每个独立的查询文件中包含了多个输入的请求数字串: 266 2245489 1 因为我们的手机键盘上与字母相对应的数字只有2~9这八个数字,但是0,1,#,*键也是可以输入的,即可以包含在查询文本中,同学需要对这样的情况进行考虑;对于查询文件为空的情况也应进行考虑。注意:每个请求数字串之间用回车分隔;查询文件的最后一行不为空行。 4、输出文件格式每次测试将产生一个查询结果的输出文件,针对上面的查询文件和我们给同学的码本,所得的查询结果输出文件如下所示: 266 2 COME BOND 1 AMONG 1 ANNOUNCED 3 CONGESTION CONFERENCE CONSCIENCE 1 CONSTITUENTS 1 CONSIDERATION 2245489 1 ABILITY 1 0 在查询结果文件中,不同的查询数字串的查询结果之间用1到2个回车符分隔。同一个查询数字串的查询结果之间不能有多余的空行。对于每一个查询数字串,第一行输出该数字串,从第二行开始输出查询到的字符串结果:第二行为仅使用查询文件中的数字作为输入,得到的搜索结果(如果存在);下一行为使用查询文件中的数字作为输入,并以任意1个附加字符作为后缀时得到的结果(如果存在);下一行为使用查询文件中的数字作为输入,并以任意2个附加字符作为后缀时得到的结果(如果存在)……依此类推。对于每一行搜索结果,首先输出查询到的匹配码本的个数,然后输出匹配的码本,个数与码本之间,码本与码本之间用空格符分隔。匹配的多个码本需要进行排序后输出,首先按照得分高低进行排序,对于得分相同的码本则按照字符串的大小顺序由小到大排列2。当没有与输入的数字串相匹配的码本时输出0。如上面的例子中数字串1的查询结果为0。当查询文件为空的情况,查询结果文件也应该为空。 5、示例测试数据随本文档还包括了一个码本文件的示例(codebook.txt)、一个输入文件的示例(query.txt)与一个输出文件的示例(res.txt),其内容为前面所举的格式示例。我们同时还提供给同学一个用户界面的FormatCheck.exe格式检查程序,界面如下图所示:点击“文件”菜单下的“打开”子菜单,选择你的查询结果输出文件。此时显示“提示”对话框。

解法思路概要:

这个算法思路很普遍.

对于词典存储结构的建立

由于只有8个数字,所以可以考虑建立八棵八叉树,每个八叉树的结点代表一个数字,如下图:

当然,八叉树的规模比这个庞大。这里只是做个示例。在把词典存入树的过程采用的是动态分配的方法,例如词典apple,则转换成对应的键盘数字应该是27753

关于电话号码对应单词相关推荐

  1. 【精】沐浴智慧之光:研究查找算法

    首先保证这一篇分析查找算法的文章,气质与大部分搜索引擎搜索到的文章不同,主要体现在代码上面,会更加高级,会结合到很多之前研究过的内容,例如设计模式,泛型等.这也与我的上一篇面向程序员编程--精研排序算 ...

  2. 第3章 结构之法——电话号码对应英语单词

    电话号码对应英语单词 问题描述 分析与解法 详细代码如下: 1 package chapter3jiegouzhifa.TelephoneMapWords; 2 /** 3 * 电话号码对应英语单词 ...

  3. Bailian3712 电话号码生成英语单词【查表】

    3712:电话号码生成英语单词 总时间限制: 1000ms 内存限制: 65536kB 描述 我们知道手机键盘上一般可以用于输入字母,2可以输入a,b,c,3可以输入d,e,f,4可以输入g,h,i, ...

  4. 3.2电话号码对应英语单词

    方法一.  神奇的双重while循环.  注:显然可以利用这种方法,打印出任意一个N维数组的任意组合. 个人理解:此双重循环的关键在于 answer[ ] 数组以及索引 k .answer[ ] 数组 ...

  5. 编程之美——电话号码对应英语单词

    编程之美--电话号码对应英语单词     电话号码盘一般可以用于输入字母.如用2可以输入A,B,C,用3可以输入D,E,F等...     问题1:可以根据这样的对应关系设计一个程序,尽可能快的从这些 ...

  6. 3.2 电话号码对应英语单词

    原始问题如下:手机上面的数字键均对应了几个字符,譬如2对应了a,b,c.问题是当输入一段数字后,求出所有可能的字符组合 第一种方法:假设电话号码是n个数字,那么就n个for循环. 这方法果断不好 第二 ...

  7. 电话号码生成英语单词 OpenJ_Bailian - 3712 (c++,打表)

    我们知道手机键盘上一般可以用于输入字母,2可以输入a,b,c,3可以输入d,e,f,4可以输入g,h,i,5可  以输入j,k,l,6可以输入m,n,o,7可以输入p,q,r,s,8可以输入t,u,v ...

  8. 编程之美 - 电话号码对应英语单词

    问题描述: 电话的号码盘上一个数字对应着几个字母,一串数字对应着几种字母的组合. 现在给定一组数字,列出对应的字母的组合. 思路: 例如:4对应键盘上  GHI, 2对应键盘上 ABC 数字 42 的 ...

  9. 正则表达式验证代码(字母、数字、Email、网址、电话号码、汉字、身份证号码)

    <% if request("check")<>"" then astr=request("content") call ...

最新文章

  1. vue根据索引删除数组中的一个对象_Vue实现动态添加或者删除对象和对象数组的操作方法...
  2. 简析 Google Gadget 的数据丢失原因
  3. [Python] Window机器上同时安装Python 2 和 Python 3,如何兼容切换使用?
  4. CRM Fiori页面返回的元数据解析
  5. Java做一个动画效果音量调节_设计与实现一个 ISoundable 接口,该接口具有发声功能、还能调节音量大小...
  6. hive的row_number()、rank()和dense_rank()的区别以及具体使用
  7. python弹出窗口后卡死_python的tkinter模块GUI编程为啥用了while循环之后就会使得程序出现卡死未响应崩溃?...
  8. ES6-Set集合的创建
  9. 开启自己的博客园,在学习成长的路上一路向前
  10. python加四位随机数_python生成四位随机数
  11. linux test 使用方法,Linux系统test命令使用方法介绍
  12. java将图书信息写入原有文件里_Java保存图书信息
  13. 通过telegram 传递变量_Docker随时随地玩转变量
  14. hive编程指南电子版_2020浙江省太阳能利用及节能技术重点实验室开放基金课题申请指南...
  15. VM12 虚拟机使用桥接模式却连不上网的解决办法
  16. scratch编程记忆力小游戏
  17. 豆瓣电影Top250数据爬取、数据分析及数据可视化
  18. Linux服务器开发实战——QT控制界面+epoll聊天服务
  19. 常系数非齐次线性微分方程和非齐次方程组的特解和齐次解的关系
  20. Jenkins系列之——前言 Jenkins初识

热门文章

  1. 如何重置mac上的系统管理控制器smc教程
  2. NAL单元的各种类型介绍
  3. html div横向排列
  4. 分享几款流行的医疗机器人
  5. python gooey_使用Three.js制作Gooey图像悬停效果
  6. 3D人脸识别技术,正在全面入侵我们的日常生活
  7. 不降低软件质量,如何有效节省开发成本?
  8. JavaScript 设计模式核⼼原理与应⽤实践 之 行为型:策略模式——重构小能手,拆分“胖逻辑”
  9. 米尔科技 Z-turn XC7Z010 Linux驱动源码路径
  10. 2020年二级页表大题