当我传入包含大写字符的字符串时,我的凯撒密码失败

问题描述 投票:0回答:1

我用 Ruby 编写了一个凯撒密码加密程序。当我传入包含小写字符的字符串时,它似乎工作得很好,直到我传入一个包含大写字符的字符串。每当我传入包含大写字符的字符串时,代码都会在

main.rb:7:in block in `caeser_cipher': undefined method `+' for nil (NoMethodError)
行之间引发 NoMethodError。

这是我的代码:

def caeser_cipher(string, key)
  alphabet = ('a'..'z').to_a
  cipher = ""

  string.each_char do |char|
    if alphabet.include?(char.downcase) 
      new_key = (alphabet.index(char) + key) % 26
      char = alphabet[new_key]
    end 
    cipher << char
  end
  cipher
end

puts "Enter whatever you please (of course a string of text) that you want encrypted!!!"
text = gets.chomp
puts "And then the offset value"
num = gets.chomp.to_i

puts caeser_cipher(text, num)

我尝试将

char = alphabet[new_key]
包装在另一个 if 条件中以检查
char == char.upcase
,如果评估结果为 true,则执行此操作
char = alphabet[new_key].upcase
,但也失败了。

ruby caesar-cipher
1个回答
0
投票

问题上线了

new_key = (alphabet.index(char) + key) % 26

如果

char
不是小写字符,则不会在字母表中找到它,因此
index
将返回
nil

您需要查找

char
的小写版本,因此可以将该行更改为

new_key = (alphabet.index(char.downcase) + key) % 26

© www.soinside.com 2019 - 2024. All rights reserved.