Umkehr-Array in C?
Hi ich versucht zu implementieren, die eine reverse-array-code, aber es scheint nicht zu funktionieren und ich bin wirklich nicht sicher, warum. Die For-Schleife einfach nicht zu funktionieren scheint. Ich weiß nicht, warum, weil die Logik scheint ganz richtig zu mir.
#include <stdio.h>
#include <string.h>
void reverse(char, int);
int main()
{
char a[100];
gets(a);
reverse(a, strlen(a)-1);
printf("%s\n",a);
getchar();
getchar();
getchar();
return 0;
}
void reverse(char ar[], int n)
{
char c;
int i = 0;
printf("n = %d" , n);
for ( i = 0; i >= n ; i++){
c = ar[i];
ar[i] = ar[n];
ar[n] = c;
printf("Processed");
n--;}
}
/*
if (begin >= n)
return;
c = *(x+begin);
*(x+begin) = *(x+n);
*(x+n) = c;
offs = x++;
printf("Begin = %d , n = %d, offs = %p \n", begin, n, offs);
reverse(x, ++begin, --n); */
Möchten Sie vielleicht damit anfangen, indem Sie Ihren Prototypen entsprechend Ihrer tatsächlichen Funktion.
vielleicht sollte
Unten gibt es einen auskommentierten code, der funktioniert, wenn ich den pass 3 Parameter durch, aber ich wünschte, es zu begrenzen, sich einfach nur die 2 Parameter, dem string und seine Länge
Oh hasanovh Dank!
Aus Neugier nur, warum sogar übergeben Sie die Länge. Sind Sie Vergegenwärtigung der Aufruf dieser nur auf eine Zeichenfolge? Oder ist das
vielleicht sollte
i<=n
?!Unten gibt es einen auskommentierten code, der funktioniert, wenn ich den pass 3 Parameter durch, aber ich wünschte, es zu begrenzen, sich einfach nur die 2 Parameter, dem string und seine Länge
Oh hasanovh Dank!
Aus Neugier nur, warum sogar übergeben Sie die Länge. Sind Sie Vergegenwärtigung der Aufruf dieser nur auf eine Zeichenfolge? Oder ist das
strlen()
aus reverse()
einfach nicht in der wheelhouse dieser Aufgabe?
InformationsquelleAutor JoC | 2013-10-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Schleife
sollte
Vermeiden Sie die Verwendung
gets()
verwendenfgets()
statt.reverse
Funktion tatsächlich wirksam danach? weil, nicht der Zeiger wird als parameter.Arrays sind einfach mit dem Namen-Adressen in C. Sprach-Adresse übergeben, da ein pointer Wert, die der Funktion. Sie sind die Ausnahme von der pass-by-value-idiom in C, aber nicht wirklich. Ihre "Wert" ist Ihre Adresse. Die meisten Ingenieure nennen diese Adresse synonymousness "pointer decay", obwohl ich finde, der Slogan ist in der Regel irritierend, als das Wort "decay" erscheint genau einmal im gesamten C99-standard, und sein Aussehen hat absolut nichts mit arrays an Funktionen übergeben.
ALS WhozCraig sagte
Arrays are simply named addressed in C. Said-address is passed as a pointer value to the function
hinzufügen dieses Beispiel WhozCriag Erklärung. ideone.com/B9e5hGInformationsquelleAutor Gangadhar
for-Schleife Bedingung sollte sein "ich < n'. und Prototyp-Deklaration übereinstimmen sollten.
InformationsquelleAutor Siddhartha Ghosh
for-Schleife Bedingung sollte sein "ich < n'. und Prototyp-Deklaration übereinstimmen sollten.
und "int n" ist die Größe des Arrays. Also "i<=n" würde das gleiche array Umgekehrt vom Ende bis Mitte, und wieder von Mitte bis Spitze. So Ergebnis ist das gleiche wie array. stellen Sie "n" als die Hälfte der array-Größe.
InformationsquelleAutor TDK
Finde ich besser verwenden von Makros für diese Aufgabe. Im code unten ist es ein makro SWAP.
Inhalt einer Datei main.c
Zusammenstellung:
Ergebnis:
Hinweise:
Basierend auf
4.1 Definiert ein Präprozessor-makro swap(t, x, y)
4.2 Die Umkehrung ein array In place
4.3 Die Antworten auf diese Frage
Testumgebung
InformationsquelleAutor Seti Volkylany