Ruby单词内字母间空格正则及摩尔斯编码字母分隔问题求助
摩尔斯码编码问题:单词内字母间缺少空格分隔
我的代码能正常运行,但没实现一个要求:同一单词内的字母转换为摩尔斯码时,彼此间要用空格分隔。比如单词hi的摩尔斯码应该是.... ..(4个点、空格、2个点)。我尝试在MASTER哈希里用"" => " "来表示这个分隔,但代码识别不了,请问我哪里错了?
以下是我的代码:
MASTER = { "A" => ".-", "B" => "-...", "C" => "-.-.", "D" => "-..", "E" => ".", "F" => "..-.", "G" => "--.", "H" => "....", "I" => "..", "J" => ".---", "K" => "-.-", "L" => ".-..", "M" => "--", "N" => "-.", "O" => "---", "P" => ".--.", "Q" => "--.-", "R" => ".-.", "S" => "...", "T" => "-", "U" => "..-", "V" => "...-", "W" => ".--", "X" => "-..-", "Y" => "-.--", "Z" => "--..", " " => "|", "a" => ".-", "b" => "-...", "c" => "-.-.", "d" => "-..", "e" => ".", "f" => "..-.", "g" => "--.", "h" => "....", "i" => "..", "j" => ".---", "k" => "-.-", "l" => ".-..", "m" => "--", "n" => "-.", "o" => "---", "p" => ".--.", "q" => "--.-", "r" => ".-.", "s" => "...", "t" => "-", "u" => "..-", "v" => "...-", "w" => ".--", "x" => "-..-", "y" => "-.--", "z" => "--..", "," => " ", "" => " ", "'" => " " } def encode(text) # TODO: write a method which returns the morse sentence for the given text # NOTE: you may want to extract a `encode_word` method encode_word = "" text.chars.each { |element| encode_word << element.gsub(/(\w|\W)/, MASTER) } encode_word end
问题根源
你在MASTER哈希里加"" => " "完全没用,因为text.chars会把文本拆成单个字符,根本不会出现空字符串元素,这个键永远匹配不到。
修正方案
不用在哈希里搞空字符串映射,换个思路处理:
- 先把输入文本按空格分割成单个单词
- 对每个单词,把每个字符转成对应的摩尔斯码,再用空格把这些码拼接起来
- 最后把所有处理好的单词用你定义的分隔符
|拼接(可加空格提升可读性)
修正后的代码
MASTER = { "A" => ".-", "B" => "-...", "C" => "-.-.", "D" => "-..", "E" => ".", "F" => "..-.", "G" => "--.", "H" => "....", "I" => "..", "J" => ".---", "K" => "-.-", "L" => ".-..", "M" => "--", "N" => "-.", "O" => "---", "P" => ".--.", "Q" => "--.-", "R" => ".-.", "S" => "...", "T" => "-", "U" => "..-", "V" => "...-", "W" => ".--", "X" => "-..-", "Y" => "-.--", "Z" => "--..", " " => "|", "a" => ".-", "b" => "-...", "c" => "-.-.", "d" => "-..", "e" => ".", "f" => "..-.", "g" => "--.", "h" => "....", "i" => "..", "j" => ".---", "k" => "-.-", "l" => ".-..", "m" => "--", "n" => "-.", "o" => "---", "p" => ".--.", "q" => "--.-", "r" => ".-.", "s" => "...", "t" => "-", "u" => "..-", "v" => "...-", "w" => ".--", "x" => "-..-", "y" => "-.--", "z" => "--..", "," => " ", "'" => " " } def encode(text) text.split(" ").map do |word| word.chars.map { |char| MASTER[char] }.join(" ") end.join(" | ") end
代码说明
text.split(" "):把输入文本按空格拆成单词数组word.chars.map { |char| MASTER[char] }:将单词的每个字符转换为对应的摩尔斯码,得到码的数组.join(" "):用空格拼接同一单词内的摩尔斯码,满足需求- 最后用
" | "拼接所有单词结果,保持了你原来定义的单词分隔逻辑(如果需要严格无空格的|,改成join("|")即可)
内容的提问来源于stack exchange,提问作者Panamaniac507
相关产品推荐
相关产品推荐

