这个是作业……
给定一串汉语拼音的字符串,按照手机输入的方式,翻译成相对应的数字。
例如:nihao翻译成664442666
相反,给定一串数字,翻译成字母,列出所有的可能
例如:222翻译成aaa或ba或ab
请高人指点一下……提示一下也行
首先有个字母数字对照的map。
字母翻数字比较简单直接映射就行了吧。
数字翻字母因为涉及到组合问题,可以使用循环再递归的方法。不过这个方法效率不会很高。
遍历映射表,从数字串的最前面开始找映射表的字母,然后剔除已匹配的数字进行递归。
a => 2
b => 22
c => 222
d => e
...
w = 9
x = 99
y = 999
z = 9999
然后把相应的字母替换成表里面的数字就行了哈。当然你首先需要知道C++处理字符串的简单技巧。
至于数字到字母就比较囧了,你需要穷举所有可能,应该是一个广度优先搜索吧。不过其实做起来也是很容易的,就是你可能要多调试几次。
举个例子,对于2223333
首先表里面能够用的有2、22和222,因此变成
a223333
b23333
c3333
然后对于列表里面的每一个字符串的数字部分再进行一次,构造一个新的列表:
aa23333
ab3333
ba3333
cd333
ce33
cf3
一直进行到构造出来的列表里面的所有字符串都没有数字为止。