Supponendo che avessi la stringa "CIAO MONDO" c'è un modo per chiamare una funzione che sostituisce il carattere 'O' nella stringa con il carattere 'X' in modo che la nuova stringa assomigli "HELLX WXRLD"?Haskell sostituisce i caratteri nella stringa
risposta
ne dite:
let
repl 'o' = 'x'
repl c = c
in map repl "Hello World"
Se è necessario sostituire i caratteri in un secondo momento, è sufficiente aggiungere clausole alla funzione repl
.
Oh, capisco. La mia soluzione è davvero un po 'complicata. –
La corrispondenza del modello è re. – reem
Puoi farlo con un lambda in una riga? Se è così, un altro +1 da me :) – vikingsteve
Ecco un'altra soluzione possibile utilizzando divide et impera:
replaceO [] = []
replaceO (x:xs) =
if x == 'O'
then 'X' : replaceO xs
else x : replaceO xs
In primo luogo, si imposta la condizione di bordo "replaceO [] = []"
.
Se la lista è vuota, non c'è nulla da sostituire, restituendo una lista vuota.
Successivamente, prendiamo lo spago e lo dividiamo in testa e coda. in questo caso 'H':"ELLOWORLD"
Se la testa è uguale a "O", la sostituirà con "X". e applicare la funzione replaceO al resto della stringa.
Se la testa non è uguale a "O", riporterà la testa indietro dove si trova e applicherà la funzione replaceO al resto della stringa.
Siamo spiacenti per la raccolta di questo thread precedente, ma perché non utilizzare le espressioni lambda?
λ> let replaceO = map (\c -> if c=='O' then 'X'; else c)
λ> replaceO "HELLO WORLD"
"HELLX WXRLD"`
Immagino che possa essere utile.
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)
Alternativa 1 - Utilizzando MissingH
Primo:
import Data.List.Utils (replace)
Quindi utilizzare:
replace "O" "X" "HELLO WORLD"
Alternativa 2 - Utilizzare Control.Monad
Un bastardo divertente:
import Control.Monad (mfilter)
replace a b = map $ maybe b id . mfilter (/= a) . Just
Esempio:
λ> replace 'O' 'X' "HELLO WORLD"
"HELLX WXRLD"
Alternativa 3 - utilizzando se
suggerimenti di Amon era probabilmente la più bella credo! Nessuna importazione e facile da leggere e capire!
Ma per essere pignoli - non c'è bisogno di punto e virgola:
replace :: Eq a => a -> a -> [a] -> [a]
replace a b = map $ \c -> if c == a then b else c
- 1. Scambia caratteri nella stringa
- 2. Haskell sostituisce l'elemento nell'elenco
- 3. Haskell ottiene l'array di caratteri dalla stringa?
- 4. javascript - stringa sostituisce
- 5. Come eliminare tutti i caratteri dopo un carattere nella stringa?
- 6. sostituire i caratteri speciali nella stringa in java
- 7. Come sostituire i caratteri unicode nella stringa con qualcos'altro python?
- 8. come iterare i singoli caratteri nella stringa Lua?
- 9. utilizzando preg_match per rilevare i caratteri persiani (farsi) nella stringa
- 10. make python sostituisce i caratteri non codificabili con una stringa di default
- 11. replaceAll non sostituisce la stringa
- 12. array numpy di caratteri nella stringa
- 13. R - gsub che sostituisce i backslash
- 14. Unescape unicode nella stringa di caratteri
- 15. Contare quanti caratteri specifici nella stringa
- 16. Sostituisce una stringa con un'altra stringa
- 17. Visualizza i caratteri Unicode nella console Xcode?
- 18. caratteri speciali sono sostituisce con una piazza di app Android
- 19. sostituisce stringa/valore nell'intero dataframe
- 20. controllo quante volte stringa contiene caratteri 'g' nella stringa ammissibili
- 21. Traslitterazione/trasposizione dei caratteri nella NSString
- 22. La stringa sostituisce la corrispondenza esatta in cirillico
- 23. Python Regex sostituisce istantaneamente i gruppi
- 24. Come scambiare i caratteri stringa in Java?
- 25. Rimuovere i caratteri duplicati dalla stringa
- 26. Rimuovere i caratteri dopo la stringa?
- 27. Rimuovere i caratteri speciali da una stringa
- 28. Come mescolare i caratteri in una stringa
- 29. NSJSONSerialization - Impossibile convertire i dati nella stringa
- 30. loop su caratteri nella stringa di input utilizzando awk
possibile duplicato di [? Come posso sostituire una sottostringa di una stringa con un'altra in Haskell senza utilizzare librerie esterne come MissingH] (http://stackoverflow.com/questions/14880299/how-can-i-replace-a-substring-of-a-string-with-another-in-haskell-without-using) – Orbling
Hai cercato a tutti come questa domanda è arrivata più volte. – Orbling