c-string mit einer rekursiven funktion rückwärts ausgeben
-
jo die überschrift sagt ja schon alles. Könnt mir jemand helfen?
-
void printrev(char *str) { if (str) { printrev(str+1); printf("%c", *str); } }
-
nicht ganz.
void printrev(const char* str) { if (*str) { printrev(str+1); putchar(*str); } }
-
ehm ja schon mal danke für die hilfe. Aber könntest du den code mal erklären, weil ein if(str) hab ich irgendwie noch nicht gesehen. Als ein if schon
aber da ist ja keine abfrage à la "if (str < bla)" oder ähnliches. Und wozu wird dem printf ein %c übergeben? Sorry bin noch nicht so weit in c...
-
*str liefert dir das zeichen auf das der pointer str gerade zeigt.. wenn das zeichen ne null ist wird das als false gewertet an sonsten als true...
if(*str) heisst in dem falle also: so lange str nicht auf ne 0 zeigt tue ....
-
@Bashar: Hast ja recht
Also, die rekursive Funktion reduziert das Problem von "String rueckwaerts ausgeben" zu "Reststring rueckwaerts ausgeben und danach erstes Zeichen ausgeben". Wenn man es sich ueberlegt, kommt das selbe bei raus. (Reststring = String ohne erstes Zeichen.)
Etwas deutlicher:
void printrev(const char* str) { if (str[0] == 0) return; // Abbruchbedingung, falls String leer printrev(str+1); // Reststring rueckwaerts ausgeben. Oder: printrev(&str[1]) putchar(str[0]); // Ersten char ausgeben }
-
yeah danke
gute und schnelle hilfe hier