假如我有字符串“Hello World”,是有办法,我可以调用以字符的字符串替换字符“O”功能“X”,使新的字符串会是什么样子“HELLX WXRLD”?哈斯克尔替换字符的字符串
5
A
回答
26
如何:
let
repl 'o' = 'x'
repl c = c
in map repl "Hello World"
如果以后需要更换其他字符,只需添加条款的repl
功能。
1
下面是使用分而治之的另一种可能的解决方案:
replaceO [] = []
replaceO (x:xs) =
if x == 'O'
then 'X' : replaceO xs
else x : replaceO xs
首先,你设置的边缘状态"replaceO [] = []"
。
如果列表为空,则无法替换,返回空列表。
接下来,我们采取的字符串,并将其分为头部和尾部。在这种情况下'H':"ELLOWORLD"
如果头等于'O',它将用'X'代替它。并将replaceO函数应用于字符串的其余部分。
如果头部不等于'O',那么它会将头部放回原位并将replaceO函数应用于字符串的其余部分。
9
对不起,我拿起这个古老的线程,但为什么不使用lambda表达式?
λ> let replaceO = map (\c -> if c=='O' then 'X'; else c)
λ> replaceO "HELLO WORLD"
"HELLX WXRLD"`
-2
我想这可能是有用的。
main = print $ charRemap "Hello WOrld" ['O','o'] ['X','x']
charRemap :: [Char] -> [Char] -> [Char] -> [Char]
charRemap [] _ _ = []
charRemap (w:word) mapFrom mapTo =
if snd state
then mapTo !! fst state : charRemap word mapFrom mapTo
else w : charRemap word mapFrom mapTo
where
state = hasChar w mapFrom 0
hasChar :: Char -> [Char] -> Int -> (Int,Bool)
hasChar _ [] _ = (0,False)
hasChar c (x:xs) i | c == x = (i,True)
| otherwise = hasChar c xs (i+1)
3
备选1 - 使用MissingH
第一:
import Data.List.Utils (replace)
然后使用:
replace "O" "X" "HELLO WORLD"
替代2 - 使用Control.Monad
一个有趣的私生子:
import Control.Monad (mfilter)
replace a b = map $ maybe b id . mfilter (/= a) . Just
例子:
λ> replace 'O' 'X' "HELLO WORLD"
"HELLX WXRLD"
方案3 - 使用如果
阿蒙的建议可能是最好的,我相信!没有进口,便于阅读和理解!
但挑剔 - 有没有必要分号:
replace :: Eq a => a -> a -> [a] -> [a]
replace a b = map $ \c -> if c == a then b else c
相关问题
- 1. 哈斯克尔[字符]以字节串
- 2. 哈斯克尔转换数字的字符串转换成
- 3. 哈斯克尔显示对字符串
- 4. 哈斯克尔处理[IO字符串]
- 5. 字符串变量名哈斯克尔
- 6. 哈斯克尔 - 如何将字符串到字符串
- 7. 哈斯克尔换行符
- 8. 转换哈斯克尔诠释与领先的零字符串
- 9. 哈斯克尔:字符串转换为现场MongoDB的
- 10. 哈斯克尔木卫一字符串转换
- 11. 哈斯克尔排序[(字符串,字符串)]相对于元组
- 12. 哈斯克尔:预计类型:[字符]实际类型:[[字符]
- 13. 更改字符串的颜色 - 哈斯克尔
- 14. 哈斯克尔:创建字符串列表的记录和<字符串,字符串列表>的对
- 15. 哈斯克尔字节串包/解压
- 16. 哈斯克尔如何转移输入类型:字符串INT
- 17. 哈斯克尔:模式匹配字符串
- 18. 索引与[INT]和[字符串]]哈斯克尔
- 19. 获得从runRedis字符串CONN $得到 “你好” - 哈斯克尔
- 20. 字符串从文件中哈斯克尔
- 21. 哈斯克尔+输出字符串为String类型
- 22. 与哈斯克尔状态monad字符串连接
- 23. 哈斯克尔-问题:IO字符串 - > [INT]
- 24. 一个项目字符串列表为String [哈斯克尔]
- 25. 哈斯克尔前字母
- 26. 哈斯克尔如何字符转换为Word8
- 27. 哈斯克尔,替换名单
- 28. 哈斯克尔:字节字符串的问题,当我使用getArgs
- 29. 替换字符串字符
- 30. 哈斯克尔埃宋JSON图书馆字节字符串问题
的可能重复[?我怎么能替换另一个在Haskell一个字符串的一个子,而无需使用外部库,例如MissingH(HTTP:/ /stackoverflow.com/questions/14880299/how-can-i-replace-a-substring-of-a-string-with-another-in-haskell-without-using) – Orbling
你搜索,就好象这个问题已经来临多次。 – Orbling