2016-10-18 4 views
1

Ich schreibe eine Funktion Zeichenfolge ersetzen, die eine Zeichenfolge, ein Zielzeichen und ein Ersatzzeichen verbraucht. Die Funktion erzeugt eine neue Zeichenkette, die mit der konsumierten Zeichenkette identisch ist, wobei alle Vorkommen des Zielzeichens (falls vorhanden) durch das Ersetzungszeichen ersetzt werden. Zum Beispiel (string-replace "word" #\o #\y) ⇒ "wyrd"Schlägerfehler in String-Replace-Funktion?

Hinweis: cannnot ich keine integrierte String-Funktionen verwenden, um andere als string->list und list->string

Mein Code sieht aus wie

(define(list-replace input-list from-char to-char) 
    (string-replace input-list from-char to-char)) 

(define(string-replace input-string from-char to-char) 
    (list->string(string-replace(string->list input-string) from-char to-char))) 

Um zu überprüfen, gebe ich (string-replace "word" #\o #\y) Ich erhalte ein Fehler string->list: expects a string, given (cons #\w (cons #\o (cons #\r (cons #\d empty))))

Kann mir jemand in diesem Code helfen, damit es funktioniert?

+0

Bitte [bearbeiten] Sie Ihre Frage Titel zu etwas beschreibender. Es sollte das Problem, das Sie haben, oder die Frage, die Sie stellen, auf eine Weise erklären, die für einen zukünftigen Leser Bedeutung hat, der es in einem Suchergebnis sieht. * Schläger * ist von dem Tag verfügbar, den Sie verwendet haben, und * Anfängerfehler? * Ist völlig bedeutungslos. –

+0

ok fertig bearbeitet.Sorry! – kaminey

Antwort

0

Man kann auch 'for/list' verwenden, um eine modifizierte Liste zu erstellen (aus der in die Liste konvertierten Eingabezeichenfolge). Die modifizierte Liste kann dann in eine modifizierte Zeichenfolge konvertiert werden:

(define (string-replace input-string from-char to-char) 
    (list->string 
    (for/list ((item (string->list input-string))) 
    (if (equal? item from-char) 
     to-char 
     item)))) 

(string-replace "word" #\o #\y) 
"wyrd"