Zeichenkette ersetzen



  • Hi Leute,

    ich wollte euch mal fragen wie ihr das hier lösen würdet:

    Gegeben sind zwei Defines, z.B.

    #define TEST asdf
    #define BLA fdsa

    Diese beiden defines sollen in ein Array gespeichert werden.

    Bis dahin sollte es ja eigentlich kein Problem geben.

    Jetzt soll mein Programm eine Datei öffnen und überall, wo in dieser Datei TEST steht, soll er asdf dafür einsetzen und überall wo BLA steht soll nun fdsa hin.

    Wie würdet ihr das machen? Hat jemand schonmal so was geschrieben und kann mir evtl. den Code zukommen lassen?

    Bis bald

    mycrypt



  • /*
    einlesen der datei in einen std::vector<std::wstring> ...
    replace all "TEXT" by "asdf"
    */
    
    Replace(strings, L"TEXT", L"asdf");
    
    void Replace(std::vector<std::wstring> &strings, std::wstring search, std::wstring replace)
    {
        std::size_t pos = 0;
        for(unsigned int i=0; i<strings.size(); ++i)
        {
            while((pos = strings[i].find(search)) <= search.length())
                strings[i].replace(pos, search.length(), replace.c_str(), replace.length());
        }
    }
    


  • Das funktioniert nur teilweise.

    Angenommen meine Datei hat folgenden inhalt:

    der die das
    der der das
    die das der

    Mein programm soll "der" mit "test" ersetzen, also mit deiner Hilfe:

    Replace(vec, L"der", L"test");

    Ausgabe ist dann allerdings nur:

    test die das
    test der das
    die das der

    Sprich, das Programm ersetzt das Wort nur, wenn es am Anfang nur nur einmal pro Zeile vorhanden ist.

    Hat noch jemand ne Idee?

    MfG



  • Mach mal statt "<= search.length()" lieber "!= std::wstring::npos"



  • hier gibts eine korrekte replace_all funktion: http://www.c-plusplus.net/forum/viewtopic-var-t-is-155739.html



  • LordJaxom schrieb:

    Mach mal statt "<= search.length()" lieber "!= std::wstring::npos"

    danke damit läufts perfekt


Anmelden zum Antworten