如何仅移动字母而不移动符号/空格?

时间:2019-04-17 13:18:51

标签: haskell

我在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

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

下面的脚本会产生预期的结果:

position: sticky;

注意:代码不会跳过空格,而只会覆盖空格...因此实际上,这意味着空格数量将对加密字符串产生影响。否则程序会稍微复杂一些。