ruby ceaser cipher打印错误,打印未修改的字符串

时间:2017-07-23 17:24:49

标签: ruby

我在使用这个ceaser密码项目时遇到了麻烦。我环顾四周,比较并运用了我的发现,但还没有成功。

它获得了数据,但它只是打印出我的字符串而没有移动它。

此处是我的代码。

def ceaser(k, v = 1)
    char = k.split("")
    alphabet = Array("a".."z")
    cipher = Hash[alphabet.zip(alphabet.rotate(v))]
    char.join
end

   p ceaser "this string",2

如何修复它并使其转变?

2 个答案:

答案 0 :(得分:2)

您没有将密码应用于字符串/数组。 我遍历字符串并获取密码的映射,推送这些映射,然后重新加入字符串。

def ceaser(k, v = 1)
    char = k.split("")
    alphabet = Array("a".."z")
    cipher = Hash[alphabet.zip(alphabet.rotate(v))]
    ciphertext = []

    char.each do |element|
      ciphertext.push(cipher[element])
      #note you do not have anything in the cipher for spaces and it returns nil
    end

    ciphertext.join
end

答案 1 :(得分:0)

您需要根据密码规则映射您的角色:

char.map { |letter| cipher[letter] || letter }.join

如果没有密码匹配,我们只返回原始字符。