Angenommen, ich hätte die Zeichenfolge "HALLO WORLD" gibt es eine Möglichkeit, ich kann eine Funktion aufrufen, die das Zeichen 'O' in der Zeichenfolge durch das Zeichen 'X' ersetzt, so dass die neue Zeichenfolge aussehen würde "HELLX WXRLD"?Haskell ersetzt Zeichen in String
Antwort
Wie wäre:
let
repl 'o' = 'x'
repl c = c
in map repl "Hello World"
Wenn Sie später zusätzliche Zeichen ersetzen müssen, fügen Sie einfach Klauseln auf repl
Funktion.
Oh, ich verstehe. Meine Lösung ist in der Tat ein bisschen kompliziert. –
Mustervergleich ist König. – reem
Können Sie dies mit einem Lambda in einer Zeile tun? Wenn ja, noch ein +1 von mir :) – vikingsteve
Hier ist eine andere mögliche Lösung unter Verwendung von Teile und Herrsche:
replaceO [] = []
replaceO (x:xs) =
if x == 'O'
then 'X' : replaceO xs
else x : replaceO xs
Zuerst stellen Sie die Randbedingung "replaceO [] = []"
.
Wenn die Liste leer ist, gibt es nichts zu ersetzen, eine leere Liste zurückgeben.
Als nächstes nehmen wir die Saite und teilen sie in Kopf und Schwanz. In diesem Fall 'H':"ELLOWORLD"
Wenn der Kopf gleich 'O' ist, wird er durch 'X' ersetzt. und wenden Sie die ReplaceO-Funktion auf den Rest der Zeichenfolge an.
Wenn der Kopf nicht gleich 'O' ist, wird der Kopf dorthin zurückgebracht, wo er ist, und die replaceO-Funktion auf den Rest der Zeichenfolge angewendet.
Entschuldigung für die Abholung dieses alten Threads, aber warum nicht Lambda-Ausdrücke verwenden?
λ> let replaceO = map (\c -> if c=='O' then 'X'; else c)
λ> replaceO "HELLO WORLD"
"HELLX WXRLD"`
Ich denke, das könnte nützlich sein.
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)
Alternative 1 - Mit missingh
Erstens:
import Data.List.Utils (replace)
Dann nutzen:
replace "O" "X" "HELLO WORLD"
Alternative 2 - Verwendung Control.Monad
Ein lustiger Bastard:
import Control.Monad (mfilter)
replace a b = map $ maybe b id . mfilter (/= a) . Just
Beispiel:
λ> replace 'O' 'X' "HELLO WORLD"
"HELLX WXRLD"
Alternative 3 - Verwendung, wenn
Amon Vorschläge wohl schönste war glaube ich! Keine Importe und einfach zu lesen und zu verstehen!
aber wählerisch zu sein - es gibt keine Notwendigkeit für Semikolon:
replace :: Eq a => a -> a -> [a] -> [a]
replace a b = map $ \c -> if c == a then b else c
- 1. Haskell String ersetzen
- 2. PyCharm ersetzt Zeichen in Docstrings
- 3. Effiziente String-Implementierung in Haskell
- 4. "-" wird durch Zeichen% 2D1 ersetzt?
- 5. Wie ersetzt man Zeichen in Bienenstock?
- 6. Ersetzt String in Swift 2
- 7. String-Interpolation in Haskell
- 8. String Manipulation in Haskell
- 9. String Formatierung in Haskell
- 10. Haskell Doppel String Concatenation
- 11. Python string.replace() ersetzt keine Zeichen
- 12. Zeichen zu int. Haskell
- 13. Wie ersetzt man Zeichen in Excel?
- 14. Java ersetzen Methode, mit leeren Zeichen ersetzt
- 15. vergleichen String-Inhalte in Haskell
- 16. Haskell: String Splitting. Learning algo
- 17. Wie ersetzt man einen Apostroph in einem String in Javascript?
- 18. Haskell printf zu String
- 19. Einfache Haskell String verwalten
- 20. Java-Code-Optimierung und ersetzt alle Zeichen in einer Datei
- 21. Haskell, Datenbaumfunktionen, String-Ausgabe?
- 22. ein [String: ANYOBJECT] zuweisen [String: ANYOBJECT] in Swift ersetzt
- 23. String-Format und Hex-Zeichen
- 24. Haskell/Alex: Warnung: Tab-Zeichen
- 25. Zweig ersetzt plus und zwei Räume in String
- 26. Regex ersetzt aufeinanderfolgende Nicht-Alpha-Zeichen durch einzelnes Zeichen
- 27. Haskell/GHC: Polymorphe Zeichen Literale
- 28. iText - Problem mit Zeilenumbruch Zeichen ersetzt durch?
- 29. asp.net ersetzt SQL-Kollation spezifische Zeichen
- 30. Request.Params ersetzt Zeichen "+" für "" (Leerzeichen) .net
möglich Duplikat [? Wie kann ich einen Teilstring eines Strings mit einem anderen in Haskell ersetzen, ohne Verwendung von externen Bibliotheken wie missingh] (http://stackoverflow.com/questions/14880299/how-can-i-replace-a-substring-of-a-string-with-another-in-haskell-without-using) – Orbling
Haben Sie überhaupt gesucht, wie diese Frage gekommen ist viele Male. – Orbling