正确使用 String#tr 方法?
use correctly String#tr method?
Crystal-lang 的新手,我实际上正在尝试编写凯撒密码。
问题是,当我输入要编码的字符串时,程序显示相同的字符串而没有修改。
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 必须 return 一个值,我不明白为什么什么都没有改变。
欢迎来到 Stack Overflow!
这对您不起作用的原因是,如果您检查 alphabet
数组,它实际上只是大写字母。所以在你的翻译中,你只翻译大写字符。如果改为更改
alphabet=("a".."z").to_a
这将翻译为小写字符。
如果你想两者都做,那么我建议创建两个 "alphabets" 一个大写字母和一个小写字母,然后在字符串上应用两次翻译,一个大写字母和一个小写字母大小写字母。
Crystal-lang 的新手,我实际上正在尝试编写凯撒密码。 问题是,当我输入要编码的字符串时,程序显示相同的字符串而没有修改。
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 必须 return 一个值,我不明白为什么什么都没有改变。
欢迎来到 Stack Overflow!
这对您不起作用的原因是,如果您检查 alphabet
数组,它实际上只是大写字母。所以在你的翻译中,你只翻译大写字符。如果改为更改
alphabet=("a".."z").to_a
这将翻译为小写字符。
如果你想两者都做,那么我建议创建两个 "alphabets" 一个大写字母和一个小写字母,然后在字符串上应用两次翻译,一个大写字母和一个小写字母大小写字母。