Der Martin: C++ - Problem *Hilfe*

Beitrag lesen

Hallo,

Ich möchte mit C/C++ (WinApi) ein Programm schreiben, was jeden Buchstaben durch einen anderen ersetzt.

okay, hört sich einfach an.

Das mit der Darstellung bekomme ich hin. Aber an der "Ersetzen-Funktion" scheitert es.

Oh, ich hätte eher vermutet, dass man an den anspruchsvolleren Dingen scheitert, nicht an den Basics. Also was haben wir:
 * Die Länge eines Strings erhält man in C nur umständlich, aber wenn man
   Schritt für Schritt durchgeht, findet man das Ende leicht: Ein Nullbyte
 * Ein String wird durch einen Zeiger auf Zeichen oder durch ein Array von
   Zeichen dargestellt; in beiden Fällen kann man mit dem Index-Operator []
   auf die einzelnen Zeichen zugreifen, im Falle des Zeigers außerdem auf
   das erste Zeichen mit dem Dereferenzierungs-Operator *
 * Nun musst du nur noch wissen, *was* du an der Stelle jedes Zeichens neu
   zuweisen möchtest

Beispiel:

int ModifyString(char *string)
 { int i;

while (string[i]!=0)        // ein Nullbyte markiert in C das String-Ende
    { string[i] = AnotherChar; // hier Ersatzwert eintragen
      i++;                     // Index erhöhen
    }                          // und weiter
   return (0);                 // ein Dummy-Rückgabewert der Form halber
 }

Der Rückgabewert hat hier nicht wirklich viel Sinn, ich lege meine Funktionen aber gern so an, dass sie einen Fehlercode zurückgeben - normalerweise gilt 0 dann als "alles okay".

Wenn man das jetzt noch ein wenig kürzen möchte, kann man auf die Schleifenvariable auch verzichten und stattdessen direkt den Zeiger weiterrücken; die Increment-Operation kann man in die Zuweisung hineinpacken und schließlich den expliziten Vergleich mit 0 eliminieren:

int ModifyString(char *string)
 { while (*string)
      *string++ = AnotherChar;
   return (0);
 }

Für mich ist diese kompakte, komprimierte Schreibweise klarer, aber da sind manche Leute anscheinend anderer Meinung. ;-)

So long,
 Martin

--
Okay, Alkohol ist keine Antwort.
Aber manchmal vergisst man beim Trinken wenigstens die Frage.