Ich habe ein Verständnisproblem beim tauschen einer Zeichenkette. Folgends Programm habe ich gefunden wo ein String umgekehrt wird. http://www.mrunix.de/forums/showthread.php?t=30609 Meine Frage:In der reverse-Funktion steht i<j. Müsste dann die Schleife nicht nur bis i=5 u. j=5 durchlaufen werden? Und somit auch nur 5Zeichen umgekehrt? Ich hoffe jemand kann mir sagen wo ich falsch denke. Vielen Dank Gruß Tom
for(i=0, j=strlen(s)-1; i<j; i++, j--) char s[] = "abcdef"; strlen(s) == 6 Erster Durchlauf i = 0, j = 5 Zweiter Durchlauf i = 1, j = 4 Dritter Durchlauf i = 2, j = 3 ... char s[] = "12345"; strlen(s) == 5 Erster Durchlauf i = 0, j = 4 Zweiter Durchlauf i = 1, j = 3 ...
Tom schrieb: > Ich habe ein Verständnisproblem beim tauschen einer Zeichenkette. > Folgends Programm habe ich gefunden wo ein String umgekehrt wird. > http://www.mrunix.de/forums/showthread.php?t=30609 > > Meine Frage:In der reverse-Funktion steht i<j. Müsste dann die Schleife > nicht nur bis i=5 u. j=5 durchlaufen werden? Und somit auch nur 5Zeichen > umgekehrt? > > Ich hoffe jemand kann mir sagen wo ich falsch denke. i und j 'treffen sich' in der Mitte des Strings. Du vertauscht ja immer Pärchen von Buchstaben: a b c d e f ^ ^ ^ ^ ^ ^ | | | | | | | | +-+ | | | | | | | +-----+ | | | +---------+ ( a mit f, b mit e, c mit d ) Es sind nur 3 Vertauschungen, obwohl der String 6 Zeichen lang ist. i ackert alle Buchstaben 'links' ab, während gleichzeitig j alle Buchstaben 'rechts' durchgeht. und irgendwann 'treffen sich' i und j in der Mitte und der String ist umgedreht, indem Buchstaben-Pärchen vertauscht wurden. Würdest du i über den ganzen String ackern lassen, dann vertauscht du zwar erst mal richtig, würdest dann aber in der zweiten Schleifenhälfte alles wieder zurücktauschen und am Ende wieder beim Originalstring landen.
Tom schrieb: > Ich habe ein Verständnisproblem beim tauschen einer Zeichenkette. > ... > Folgends Programm habe ich gefunden wo ein String umgekehrt wird. > ... > Ich hoffe jemand kann mir sagen wo ich falsch denke. Mal wieder ein schönes Beispiel dafür, daß (wenn man nicht umständlich einen Simulator nutzen möchte) die Nutzung von Papier, Bleistift und Radierer immer noch die beste Methode ist, ein gewisses Verständnis von Dingen zu erlangen. Die Zeit, welche benötigt wurde, obiges Prosa hinzuschreiben, ist vermutlich nicht allzu weit entfernt davon, den Inhalt von i,j und dem Array auf einem Blatt zu kritzeln und zu sehen was passiert ....
@ Karl Heinz Buchegger: Danke, sehr verständliche Erklärung! Ich habe nicht beachtet, dass immer 2 Elemente vertauscht werden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.