basic_string::replace und ::find



  • Hallo,

    ich arbeite gerade ein Buch durch, in dem unter anderem die Methoden basic_string::replace und basic_string::find anhand von Beispielen erklärt werden.

    Nun wollte ich mir mal ein kleines Programm schreiben, indem der User ein Text eingibt und in dem Text er nach ein Wort suchen kann und es mit einem anderen Wort ersetzen kann.

    Nur wie setze ich meine Idee um, denn für replace benötige ich die Anfangsposition (die ich ja durch find bekomme) und die anzahl der zu ersetzenden Zeichen. Nur wie bekomme ich die Anzahl von Buchstaben raus?

    Mir ist ja eben gerade eingefallen, wenn das ersetzende Wort länger ist als das bestehende dann überschreibt er ja die nächsten Zeichen vom nächsten Wort. Wird also etwas komplizierter als ich dachte 🙂 .

    Also müsste ich rausfinden wie lang das Wort ist mit dem ich ersetzen möchte und wie lange das zu ersetzende Wort im Text ist und bei fehlenden zeichen, einfach leerzeichen einfügt (insert).

    Hmmm... vielleicht ein wenig zu kompliziert am Anfang.

    Na vielleicht kann ja jemand ein Programm schreiben das so aussehen soll :), damit ich mich reinarbeiten kann.

    Gruß,
    Cyrill

    EDIT: Ne garnicht so kompliziert. Wenn man schaut (bei der eingabe) wie lang das ersetzende Wort ist und wie gross das neue Wort ist, könnte man schauen wieviele zeichen noch fehlen und an der position wo das Wort ist, erstmal mit dem insert ein paar leerzeichen hinzufügen. Oder?



  • DragonShaolin schrieb:

    Mir ist ja eben gerade eingefallen, wenn das ersetzende Wort länger ist als das bestehende dann überschreibt er ja die nächsten Zeichen vom nächsten Wort. Wird also etwas komplizierter als ich dachte 🙂 .

    Nope. Dem ist nicht so => ist also alles doch nicht so kompliziert.

    Beispiel: (Ungetestet)

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
            if(argc != 4)
            {
                    cout << "\n Usage: program.exe sentence to_replace replace_through\n";
                    return -1;
            }
            string sentence(argv[1]);
            size_t pos = sentence.find(argv[2]);
            if(pos != string::npos)
                    sentence.replace(pos, strlen(argv[2]), argv[3]);
    
            cout << "\n modified sentence: " << sentence << endl;
            return 0;
    }
    

    Btw.: Ein Blick auf http://www.cppreference.com schadet nie. Dort ist genau erklärt was die Methode macht und welche Parameter sie erwartet...

    Caipi


Anmelden zum Antworten