You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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会把文本拆成单个字符,根本不会出现空字符串元素,这个键永远匹配不到。

修正方案

不用在哈希里搞空字符串映射,换个思路处理:

  1. 先把输入文本按空格分割成单个单词
  2. 对每个单词,把每个字符转成对应的摩尔斯码,再用空格把这些码拼接起来
  3. 最后把所有处理好的单词用你定义的分隔符|拼接(可加空格提升可读性)

修正后的代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 04:03:11