While Argumente nicht verstanden
-
Hallo,
ich bin nun in meinem Tutorial schon etwas weiter, verstehe aber das Argument dieser While Schleife nicht richtig :
void eatspaces(char *str) { int i = 0; // ‘Copy to’ index to string int j = 0; // ‘Copy from’ index to string while((*(str + i) = *(str + j++)) != '\0') // Loop while character is not \0 if(*(str + i) != ' ') // Increment i as long as i++; // character is not a space return; }Diese funktion soll alle Leerzeichen in einem Übergebenen String ( char *str ) entfernen. Tut sie auch ,aber ich versteh die while schleife nicht wirklich.
Kann mir das mal jemand näher erklären, vielleicht mal die schlefe auseinandernehmen ?Hierrum gehts also genau : while((*(str + i) = *(str + j++)) != '\0')
Was ganz genau mach das ?Danke
Matthiasübrigens hatte ich hier :
http://www.c-plusplus.net/forum/viewtopic-var-t-is-160549-and-highlight-is-.html
auch noch ne Frage, aber anscheinend ist das forum dort nicht wirklich das richtige für diese Frage
-
while((*(str + i) = *(str + j++)) != '\0')Die Abarbeitung sieht wie folgt aus:
1. "(str+j)" wird errechnet; es wird somit das "j.te" Zeichen von "str" addressiert
2. "*(str+j)" bedeutet, dass nicht die Adresse genommen wird, sondern der Inhalt der Adresse (also das Zeichen)
4. Jetzt wird "(str+i)" ausgewertet (i.te Zeichen in str)
5. und dann das Ergebnis des obigen Zeichens (also *(str+j)" in den Inhalt von *(str+i) geschrieben (zugeweisen)
3. Dieses Zeichen wird jetzt mit != '\0' verglichen, welches man aber auch mit "!= 0" hätte schreiben können und entsprechend die "while" Schleife ausgeführt oder nicht
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
stichwort boolesche algebra.
etwas umformuliert:
bool bedingung= true; while(bedingung) { str[i]= str[j++]; if (str[i]==0) bedingung= false; else if(str[i]!=' ') i++; };
-
Hallo,
dank Euchfür dn.
Ich hatte dieses *(str + j++) nicht verstanden.
j ist am anfang doch 0. bei dem ersten aufruf des while arguments ist doch j auch noch 0 weil j++ besagt das j erst nach dem gebrauch um 1 erhöht wird ja ?Ist das so richtig ?
Matthias