我在Haskell中成功实现了vigenére密码,但是它也在改变空白。如何只移动字母(小写)?
例如,假设我要使用“ abc”作为密钥来加密“ hello rita”。它正在打印“ hfnlpprjva”而不是“ hfnlp rjva”。
这是主要方法:
vigenere_encrypt :: String -> String -> String
vigenere_encrypt key plaintext = ints2text n
where n = map (`mod` 26) (zipWith (+) keyCycle intPlainText)
keyCycle = (cycle(text2ints key))
intPlainText = text2ints plaintext
以下是辅助功能:
--lowercase letter to int conversion
let2int :: Char -> Int
let2int c = ord c - ord 'a'
--int to lowercase letter conversion
int2let :: Int -> Char
int2let n = chr(ord 'a' + n)
text2ints :: String -> [Int]
text2ints xs = map (let2int) xs
ints2text :: [Int] -> String
ints2text xs = map (int2let) xs
有什么建议吗?
答案 0 :(得分:0)
下面的脚本会产生预期的结果:
position: sticky;
注意:代码不会跳过空格,而只会覆盖空格...因此实际上,这意味着空格数量将对加密字符串产生影响。否则程序会稍微复杂一些。