我想编写一个Haskell函数,该函数需要一个字符串,并用特殊代码%20替换所有空格字符。例如:

sanitize "http://cs.edu/my homepage/I love spaces.html"
-- "http://cs.edu/my%20homepage/I%20love%20spaces.html"

我正在考虑使用concat函数,因此我可以将列表列表串联为一个普通列表。

最佳答案

changer :: [Char] -> [Char] -> [Char]
changer [] res = res
changer (x:xs) res = changer xs (res ++ (if x == ' ' then "%20" else [x]))

sanitize :: [Char] -> [Char]
sanitize xs = changer xs ""

main = print $ sanitize "http://cs.edu/my homepage/I love spaces.html"
-- "http://cs.edu/my%20homepage/I%20love%20spaces.html"
sanitize函数的目的是仅调用changer,它可以完成实际工作。现在,changer递归调用自身,直到当前字符串用尽。
changer xs (res ++ (if x == ' ' then "%20" else [x]))

它采用第一个字符x并检查它是否等于" ",如果相等则给出%20,否则将实际的字符本身作为字符串,然后将其与累积的字符串连接起来。

注意:这可能不是最佳解决方案。

关于string - 如何用 “%20”替换字符串中的空格字符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26457811/

10-09 00:30
查看更多