Michael N.: strings bearbeiten

Beitrag lesen

Hallo Calocybe!

Jetzt hast Du aber an meinem Stolz gekratzt! ;-) Guck, so geht das in C:

Das wollt ich nicht.

void xchgchar(char * string, char old, char new) {
        while (*string)
            if (*string == old) *string++ = new;
    }
(Jetzt mal so hingehackt, nicht ueberprueft.)

Muesste eigentlich so funktionieren, hab selber auch schon einige Zeit mit C gearbeitet, mag diese Sprache aber nicht so sehr, da man mit ihr viel zu viele Schweinereien machen kann.

Wer braucht schon Fehlerpruefungen? Wer sich nicht sicher ist, ob er die Funktion aufrufen soll, der soll es gefaelligst lassen. Abgesehen davon muesste er in Deinem Fall den Returnwert ja auch noch pruefen, da kann er aber gleich vorher die Fehlerbedingungen ausschliessen.

Du wirst lachen, in Punkto Nutzung von Funktionen habe ich leider schon oft genug erleben muessen, das Bibliotheks-Dokumentationen (und diese Funktion habe ich fuer eine JS-Bibliothek geschrieben) nicht gelesen werden, dann Mist uebergeben wird und sich jeder wundert ueber die Ergebnisse, daher arbeite ich immer mit einem Return-Wert, der auch einen Fehlerindikator hat.

Timos Methode hat auch was fuer sich, wenn sie durch die Rekursion auch ziemlich langsam sein duerfte.

Und natuerlich temporaer den Stack heftigst zumuellt und wehe Du hast dann X-Sessions laufen, in denen wiederum X-mal sowas rekursives ablaeuft, dann machts auf irgendeinem Rechner dann garantiert mal BUMM (--> Murphy's Law).

Vor allem kann man bei ihm nicht nur einzelne Zeichen ersetzen, sondern ganze Zeichenketten. Auch Deine Funktion, Michael, laesst sich leicht dahingehend abaendern. Und das ist das Problem bei C: Das kennt keine Strings, sondern nur Arrays of char, wobei ein char einfach ein Byte ist. Gerade deshalb laesst es sich auf einzelne Zeichen sehr leicht zugreifen, sobald man aber echtes Stringhandling machen will, braucht man erstmal ein paar Zusatzfunktionen, die man schreiben muss. Aber auf einzelne Zeichen kann man eben viel schoener zugreifen, wobei das in der obigen Funktion gar nicht so deutlich ist. Normalerweise macht man das mit string[index].

Da sprichst Du sicher von ANSI-C, MS-C hat, wenn ich mich recht entsinne, da sowas wie string eingefuehrt, ich hab's nur nie benutzt, da ich von produktgebundenen Sonderfunktionalitaeten jenseits des Standards sehr sehr wenig halte.

Bis dann
Michael N.