Forum: PC-Programmierung Verständnisproblem beim tauschen einer Zeichenkette


von Tom (Gast)


Lesenswert?

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

von Arc N. (arc)


Lesenswert?

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
...

von Karl H. (kbuchegg)


Lesenswert?

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.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

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 ....

von Tom (Gast)


Lesenswert?

@ 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
Noch kein Account? Hier anmelden.