Was macht diese Funktion ?



  • Hallo, ich probiere gerade , einen Quellcode zu vertehen, in dem unter anderem diese Funktion vorkommt :

    AString * AString::gettoken() {
      char buf[1024];
      int place = 0;
      int place2 = 0;
      while (place < len && (str[place] == ' ' || str[place] == '\t'))
        place++;
      if (place >= len) return 0;
      if (str[place] == ';') return 0;
    
      if (str[place] == '"') {
        place++;
        while (place < len && str[place] != '"') {
          buf[place2++] = str[place++];
        }
        if (place != len) {
          /* Get rid of extra " */
          place++;
        } else {
          /* Unmatched "" return 0 */
          delete str;
          str = new char[1];
          len = 0;
          str[0] = '\0';
          return 0;
        }
      } 
      else 
      {
        while (place < len && (str[place] != ' ' &&
    			   str[place] != '\t' && str[place] != ';')) 
    	{
          buf[place2++] = str[place++];
        }
      }
      buf[place2] = '\0';
      if (place == len || str[place] == ';') 
      {
        delete str;
        str = new char[1];
        len = 0;
        str[0] = '\0';
        return new AString(buf);
      }
      char * buf2 = new char[len-place2+1];
      int newlen = 0;
      place2 = 0;
      while (place < len) 
      {
        buf2[place2++] = str[place++];
        newlen++;
      }
      buf2[place2] = '\0';
      len = newlen;
      delete str;
      str = buf2;
      return new AString(buf);
    }
    

    Astring ist eine Klasse ähnlich der Klasse String. Ich habe große Probleme, diesen Code zu verstehen.



  • Hier noch die Definition der Klasse :

    class AString : public AListElem {
        friend ostream & operator <<(ostream &os, const AString &);
        friend istream & operator >>(istream &is, AString &);
    public:
    
        AString();
        AString(char *);
        AString(int);
        AString(char);
        AString(const AString &);
        ~AString();
    
        int operator==(const AString &);
        int operator==(char *);
        int operator==(const char *);
        int CheckPrefix(const AString &);
        AString operator+(const AString &);
        AString & operator+=(const AString &);
    
        AString & operator=(const AString &);
        AString & operator=(const char *);
    
        char *Str();
        int Len();
    
        AString *gettoken();
        int getat();
        AString *getlegal();
        AString *Trunc(int);
        int value();
        AString *StripWhite();
    
    private:
    
        int len;
        char * str;
        int isEqual(const char *);
    };
    


  • da bist du nicht alleine...



  • rennen hier nachts um 11 immer so leute herum ? 🤡



  • Der Code ist absolut beschissen darüberhinaus nicht mal ein Kommentar. Naja wenn du nicht daran arbeiten MUSST schmeiß ihn in den Mülleimer ansonsten wird dir nichts anderes übrig bleiben als schritt für Schritt durch die Methode zu gehen. Ich hab jetzt aber keine Lust da durchzugehen.



  • Die Funktion scheint den String zu parsen und das erste Token zurückzugeben und vom ursprünglichen klasseninternen String zu entfernen. Dabei genutzte Trennzeichen sind ' ','\t' und ';' zum Abschluss eines gesamten Strings. Führende Trennzeichen werden ignoriert. Anführungszeichen können zum Ignorieren von Trennzeichen genutzt werden also zur Zusammenfassung von Text zu einem einzelnen Token.

    Der Code ist aber wirklich nicht sehr gut und ließe sich mit C++-eigenen Methoden oder der Nutzung der Funktion strtok einfacher gestalten. Sieht aber so aus, als wollte der Autor keine ursprünglichen C-Funktionen verwenden, da nicht mal strcmp genutzt wird.



  • von welcher müllhalde haste den code denn aufgegabelt?



  • www.prankster.com/project

    Ist aus dem Sourcecode von Atlantis Pbem


Anmelden zum Antworten