Crystal-lang的新手,我实际上是在尝试编码Caesar密码。 问题是,当我输入一个字符串进行编码时,程序会显示相同的字符串而无需修改。
if ARGV.size < 3
puts "./caesarcipher [ed] [text] [num]"
exit
end
letter = ARGV[0]
str = ARGV[1]
n = ARGV[2].to_i
alphabet = ("A".."Z").to_a
case letter
when "e" then puts str.tr(alphabet.join, alphabet.rotate(n).join)
when "d" then puts str.tr(alphabet.join, alphabet.rotate(n * -1).join)
else puts "./caesarcipher [ed] [text] [num]"
end
由于tr方法中的两个参数包含我想要的内容,并且tr必须返回一个值,所以我不明白为什么什么都没有改变。
答案 0 :(得分:1)
欢迎堆栈溢出!
之所以对您不起作用,是因为如果您检查alphabet
数组,实际上它只是大写字母。因此,在翻译中,您仅翻译大写字符。如果您改为
alphabet=("a".."z").to_a
将转换为小写字母。
如果您想两者都做,那么我建议创建两个“字母”,一个带有大写字母,一个带有小写字母,然后在字符串上应用两次翻译,一个带有大写字母,另一个带有小写字母。 / p>