arrays - 通过哈希转换字符串

标签 arrays ruby string

我正在尝试将一串莫尔斯电码转换成文字。我将字符串拆分为单词。然后我将每个单词拆分成一个由字母和数字组成的辅助数组。

 def self.decode(str)
    decoded = ""
    arr = []
    p arr = str.split('  ')
    p arr.map! { |i| i.split('  ') }

    arr.each do |r|
      r.each do |i|
          decoded += @morse.invert[i].to_s[-1]
      end
    end

    p decoded
end

在我的hash ,我用数字。它们以 N 开头。在to_s[-1]中,-1就是去掉N

我收到这个错误:

`+': no implicit conversion of nil into String

不过我可以弄清楚如何通过它,因为我在数组中没有看到 nil 值。

class Morse

    @morse = {
        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: '--..',
        ' ': ' ' ,
        N1: '.----',
        N2: '..---',
        N3: '...--',
        N4: '....-',
        N5: '.....',
        N6: '-....',
        N7: '--...',
        N8: '---..',
        N9: '----.',
        N0: '-----'
    }

def self.encode(str)
    encoded = ""
    sym_temp = ""
    str = str.upcase!
    str.each_char do |c|
        ascii_check = c.ord
        if ascii_check.between?(65,90)
            temp = str[c].to_sym
            encoded += "#{@morse[temp]}" + " "
        elsif ascii_check.between?(48,57)   
            temp = "N".concat(str[c]).to_sym
            encoded += "#{@morse[temp]}" + " "
        elsif ascii_check ===(32)
            temp = str[c].to_sym
            encoded += "#{@morse[temp]}"
        end
    end
    p encoded
end

def self.decode(str)
    decoded = ""
    arr = []
    # str.split('  ').map do |i|
    p arr = str.split('  ')
    p arr.map! { |i| i.split('  ') }

    arr.each do |r|
      r.each do |i|
        p  decoded += @morse.invert[i].to_s[-1].to_s
      end
    end             

    p decoded
end

# def self.read_file
    # # @Temp = File.read("preamble_encode.txt").chomp
      # # File.open('hiscore.txt'){|f| f.lines.map{|l| l.chomp!.split(',')}}
    # # @Temp = File.foreach("preamble_encode.txt", 'r') {|f| f.lines.map{|l| l.chomp}}

# end

# def self.write_file
    # # Temp2 = File.open('preamble_decode.txt', 'w') do |f|
        # # f.puts Temp2
    # # end
# end

end


test = "Abc 1oL!"
test2 = ".-- .  - .... .  .--. . --- .--. .-.. ."
Morse.encode(test)
Morse.decode(test2)

最佳答案

你的问题在这里:

        :P => :'.--.',

哈希火箭右侧的冒号使它成为一个符号,而不是一个字符串。碰巧,您的解码测试用例包含一个 P。当您尝试查找 String '.--.' 时,它找不到它并返回 nil。

关于arrays - 通过哈希转换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37336852/

相关文章:

ruby - 如何在 Watir 中获取 HTML 中具有相同属性的元素的数量?

ruby - 单例类的出现

python - 如何逐个元素计算数组和数字之间的最大值?

arrays - Typescript:如何访问数组对象的元素?

php - SQL左连接数组部分为空

Ruby 曲线拟合(对数回归)包

arrays - 用其他数组替换部分数组的最简单方法? (将二进制数据修补到文件中)

php - 如何检查电子邮件域是否是 php 中的 gmail,然后删除 "@gmail.*"?

c# - 在 C# 中检查空字符串的最有效方法

java - 将电话号码存储为字符串时如何防止输入错误?