假如我有字符串「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