Umkehren einer Zeichenfolge in c mit Rekursion
Ich habe code geschrieben, um das umkehren einer Zeichenfolge in c... es funktioniert gut, aber ich kann nicht zurück die umgekehrte Zeichenfolge in der main()
Funktion.
#include<stdio.h>
main()
{
char a[17]="abcdefg";
reverse(a);
printf("\n");
system("PAUSE");
}
int reverse(char *a)
{
if(*a!='\0')
{
reverse(a+1);
}
printf("%c",*a);
}
druckt es die umgekehrte Zeichenfolge, aber ich möchte die umgekehrte Zeichenfolge in main()
. Wie kann ich dies tun?
Ist das eine Hausaufgabe?
nopes, ich studiere Rekursion
Die
Sie müssen swap-Zeichen in der Zeichenfolge (ein in-place-reverse), anstatt Sie zu drucken. Eine rekursive Lösung ist ineffizient, aber kann getan werden, relativ leicht.
Statt sich auf die meist nutzlosen Wissens, wie Rekursion, Sie sollten sich auf nützliches wissen, wie C99/C11 und wie zu schreiben Funktionsprototypen in der modernen C. der code enthält einige Fehler, und Sie stehen nicht im Zusammenhang mit Rekursion, sondern um grundlegende C-Programmierung.
nopes, ich studiere Rekursion
Die
int reverse()
sollte die Funktion mindestens int zurückgeben.Sie müssen swap-Zeichen in der Zeichenfolge (ein in-place-reverse), anstatt Sie zu drucken. Eine rekursive Lösung ist ineffizient, aber kann getan werden, relativ leicht.
Statt sich auf die meist nutzlosen Wissens, wie Rekursion, Sie sollten sich auf nützliches wissen, wie C99/C11 und wie zu schreiben Funktionsprototypen in der modernen C. der code enthält einige Fehler, und Sie stehen nicht im Zusammenhang mit Rekursion, sondern um grundlegende C-Programmierung.
InformationsquelleAutor Amol Singh | 2012-10-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie müssen die Zeichenfolge ändern, also durch den input buffer zu
reverse()
, anstatt nur zu drucken.Tun dies rekursiv scheint ein bisschen widerlich, sollte aber natürlich möglich sein.
Grundsätzlich, ich denke, der Druck wird für eine Zuweisung, so etwas wie dieses:
es scheint ein bisschen kompliziert ...
InformationsquelleAutor unwind
Folgenden ist ein Weg, um reverse-string mit Rekursion!
-1
im ursprünglichen Aufruf der Funktion, dies scheitert furchtbar, wenn der string leer ist (alsostrlen(cArray)
0, sodass der übergebene Wert alsiLast
ist der maximale Wertsize_t
). Vereinfachen Sie die Schnittstelle durch den Aufruf alsrev_str_recursive(cArray, strlen(cArray))
und Anordnung der rekursive Aufruf alsrev_str_recursive(arr+1, iLast-2);
nur, wenniLast > 2
. Natürlich, da es tail-rekursiv ist, kann der code optimiert werden, um eine Schleife und ohne Rekursion.Danke für das feedback, ich Stimme mit Ihnen, wenn der string leer ist, wird dies scheitern!
InformationsquelleAutor AFI
Hier ist ein weiterer Weg, um das umkehren einer Zeichenfolge mit Rekursion:
Können Sie so nennen:
InformationsquelleAutor Emre Can Kucukoglu
code
Einzug, wenn die Beantwortung mit code-snippets.InformationsquelleAutor Mohammad Chand Alam
in einer kleinen änderung Emre Kann Kucukoglu Antwort . . .
wir beseitigen können strncat_s
InformationsquelleAutor yogeshk
Dieser code ist nicht ausführbar 🙁
Sie definieren, int reverse, aber reverse-Funktion keinen Rückgabe Wert
verwenden Sie stattdessen (mit void):
a
?InformationsquelleAutor Ali Motamedi
verwenden
sprintf
wird es drucken Sie Ihre reversed string in den buffer.char buffer[17]
. Auch: Puffer ist nicht ein lvalue, sobuffer++;
ist nicht möglich.code aktualisiert. Habe es getestet und es funktioniert.
Wir wirklich brauchen Sie nicht eine Globale variable verwenden, so etwas wie dieses...
InformationsquelleAutor MOHAMED
Dies ist eine kleine rekursive Funktion, die print den string invertiert.
InformationsquelleAutor Biuni
static
Variablen zu erfassen Zustand ist nicht mit Rekursion korrekt. Sie kann, wie auch schon geschrieben eine Schleife vermieden und eine mögliche race-condition.Während dieser code kann die Frage beantworten, die Bereitstellung zusätzlicher Rahmen an, wie und/oder warum es das problem behebt, das würde verbessern die Antwort, die langfristigen Wert.
Nic3500 Danke für die Anregung.
InformationsquelleAutor Lelouch Yagami
Er fügte hinzu, die vorwärts-Deklaration von reverse(char* a) hat er nicht?
Zwei Gedanken: 1. Die Frage war über die Umkehrung der Zeichenfolge in einer Weise, dass Sie zugegriffen werden kann von der aufrufenden Funktion. 2. Wenn Sie nach einer Antwort, die ist nur code, ein großer weit-Warnung kommt: "vielleicht sollten Sie erklären, was dieser code-block zu tun".
Ich bin nicht uneins mit allen, (und ich habe/entsprechend editiert) ich habe nur versucht, Sie zu beantworten die Frage, ob sich irgendetwas geändert hatte.
InformationsquelleAutor Dave Starfield