Haskell中如何按指定次数位移单个字符?
Haskell 字符位移函数实现
基础版(无循环位移)
如果仅需要简单的ASCII码数值叠加位移(不处理字母循环),可以用以下实现:
displace :: Char -> Int -> Char displace d n = chr (ord d + n)
代码说明:
ord d将输入字符转换为对应的ASCII整数值- 加上位移次数
n得到新的ASCII数值 chr将新的ASCII数值转回字符- 示例调用:
displace 'b' 3输出'e'
进阶版(支持字母循环位移)
如果需要实现字母的循环位移(例如'z'位移1得到'a','A'位移-1得到'Z'),可以利用ASCII码范围判断和模运算实现,仅使用你指定的基础函数:
displace :: Char -> Int -> Char displace d n | ord d >= ord 'a' && ord d <= ord 'z' = chr $ ord 'a' + (ord d - ord 'a' + n) `mod` 26 | ord d >= ord 'A' && ord d <= ord 'Z' = chr $ ord 'A' + (ord d - ord 'A' + n) `mod` 26 | otherwise = d
代码说明:
- 通过
&&判断字符是否为小写/大写字母 - 计算字母在对应字母表中的相对位置,加上位移后取模26实现循环
- 非字母字符保持不变
- 示例调用:
displace 'z' 1输出'a',displace 'B' -3输出'Y'
内容的提问来源于stack exchange,提问作者Feuergeist
相关产品推荐
相关产品推荐

