我正在做以下事情:
a)实现一个函数enc :: String->字符串,该字符串将所有小写ASCII字母转换为表情符号,并将所有大写ASCII字母转换为表示动物的符号。
b)实现函数dec :: String->实现逆函数的字符串,将代表动物的表情符号和符号转换为ASCII字母。
我已经开始执行以下操作,根据输入内容检查是解码还是编码:
-- Peek into the content to decide whether we encode or decode.
convert :: String -> String
convert xs
| null $ filter (\c -> isLetter c && isAscii c) xs = dec xs
| otherwise = enc xs
main = do
contents <- getContents
putStr $ convert contents
问题在于如何在haskell工作流程中使用表情符号。即使我使用parse input error
Data.Char
答案 0 :(得分:1)
问题写得不好,没有解释问题所在。
您可以从这样的内容开始
import Data.Char
toAnimal :: Char -> Char
toAnimal c = chr . (+127970) $ ord c
toSmileyEmoji :: Char-> Char
toSmileyEmoji c = chr . (+128415) $ ord c
encode :: String -> String
encode xs = map (\c -> if isUpper c then toAnimal c else toSmileyEmoji c) xs
fromAnimal :: Char -> Char
fromAnimal c = chr $ (ord c) - 127970
fromSmileyEmoji :: Char-> Char
fromSmileyEmoji c = chr $ (ord c) - 128415
isAnimal :: Char -> Bool
isAnimal c = if ((ord c >= ord '?') && (ord c <= ord '?')) then True else False
decode :: String -> String
decode xs = map (\c -> if isAnimal c then fromAnimal c else fromSmileyEmoji c) xs
main = do
contents1 <- getLine
contents2 <- getLine
putStr $ (encode contents1) ++ "\n" ++ (decode contents2)
输入
ABCDEFGHIJKLMNOPQRSTUVWXYZ
??????????????????????????
输出
??????????????????????????
ABCDEFGHIJKLMNOPQRSTUVWXYZ
笑脸表情符号从128512开始,动物表情符号从128045开始(嗯,不是真正的实际“开始”,但至少它可以适合字母)。 ASCII小写字母从97和65(大写)开始。您只需添加它,它便会变成您想要的表情符号
例如
65 [A] + (128045 [?] - 65 [A]) = 128045 [?]
and so on...