Tips für weitere Funktionen in eigener String-Klasse



  • uhsuhz schrieb:

    noch eine Frage, reichen diese +operatoren?

    Stringclass + Stringclass
    Stringclass + Char*
    Stringclass + Char
    Char* + Stringclass
    Char + Stringclass

    dies sind die operatoren mit rückgabewert = Stringclass die ich implementieren wollte, oder fehlen noch welche?

    Mach statt "char*" als Parameter lieber "const char*", du willst die Zeichenkette schließlich nicht verändern und wenn ich nur einen Zeiger auf eine konstante Zeichenkette hab, soll das auch funktionieren 🙂

    Übrigens: Wenn du den Operator "StringClass + Char*" (oder auch den anderen) global definierst, also nicht in der Klasse und mit

    Stringclass operator+( const Stringclass& a, const char* b )
    

    , dann funktioniert automatisch auch "const char* + Stringclass" 😉



  • Badestrand schrieb:

    Übrigens: Wenn du den Operator "StringClass + Char*" (oder auch den anderen) global definierst, also nicht in der Klasse und mit

    Stringclass operator+( const Stringclass& a, const char* b )
    

    , dann funktioniert automatisch auch "const char* + Stringclass" 😉

    performancemaessig aber nicht ideal...



  • Inwiefern?



  • Badestrand schrieb:

    Inwiefern?

    weil dann der operator +(string,string) aufgerufen wird 🙂



  • oh hatte ich vergessen zu posten, ist natürlich alles const



  • so habs jetzt geschafft die replace-methode sauber hinzuschreiben indem ich die cut und schließlich die insert methode nehme, so wird automatisch speicher vergrößert oder verkleinert

    bool Stringclass::replace(unsigned int index, const Stringclass& sc, unsigned int length)
    {
        if(this->cut(index,length) && this->insert(index,sc,length))
            return true;
        return false;
    }
    

    @Shade of Mine

    Wie meinst du das mit dem Stringbuilder? wie kann er schneller anhängen, ich habeleider da gar keine ahnung wie ich das machen soll, vielleicht einen kleinen Denkanstoß wie das funktionnieren könnte oder eine kleine Hilfe wäre nett

    Danke , uhsuhz



  • uhsuhz schrieb:

    so habs jetzt geschafft die replace-methode sauber hinzuschreiben indem ich die cut und schließlich die insert methode nehme, so wird automatisch speicher vergrößert oder verkleinert

    bool Stringclass::replace(unsigned int index, const Stringclass& sc, unsigned int length)
    {
        if(this->cut(index,length) && this->insert(index,sc,length))
            return true;
        return false;
    }
    

    du kannst gleich
    return cut() && insert()
    schreiben.

    und bedenke halt, dass das nicht performant ist, da du 2 mal umkopieren musst. einmal fürs cut und einmal fürs insert.

    da wäre zB der StringBuilder praktisch.

    StringBuilder builder;
    builder.append(string bis zu dem gesuchten string)
    builder.append(replacement string);
    builder.append(rest des strings);
    *this = builder;
    

    der stringbuilder würde dann bei einem append nicht neu allokieren müssen da er zB immer erstmal 1024 Bytes allokiert und wenn du 1024 zeichen reinschreibst, holt er sich 2048 und danach 4096,... er allokiert also zuviel speicher - dafür hat er keine reallokationen bei append aufrufen...



  • iup danke, ich versuche dann mal einen Stringbuilder zu schreiben


Anmelden zum Antworten