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


Anmelden zum Antworten