Verständnisproblem beim tauschen einer Zeichenkette

Gast #2965193
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
#2965235
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
...
#2965764
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.
#2965818
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 ....

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren