Zeichen in String ersetzen



  • Moin moin,

    Ich habe den string...

    string test = "wort1 wort2 wort3";
    

    ... und möchte alle Leerzeichen durch ein "<sp>" ersetzen. Gibt es in c++ irgendeine Funktion, die das für mich erledigen kann oder muss ich mir selbst etwas schreiben ?

    Falls nein, wie wäre in diesem Fall die beste Lösung ?

    Danke

    Lusches



  • std::string teststr = "abcde dsfl sdc dsf";
    std::string findstr = " ";
    std::string replacestr = "<sp>";
    size_t position = 0;
    while((position = teststr.find(findstr, position)) != std::string::npos)
    {
        teststr.replace(position, findstr.size(), replacestr);
    }
    


  • Moien!

    Hast du viele Leerzeichen und viele Strings, dann spendierst du besser nen Puffer für die Umwandlung, damit der String nicht bei jeder Ersetzung komplett neu durchlaufen werden muss:

    string sp = "<sp>";
    	string test = "wort1 wort2 wort3";
    	string buf;
    
    	string::size_type i, N = test.size();
    
    	for ( i = 0; i < N; i++ )
    		if ( test[i] == ' ' ) buf += sp; // ein Durchlauf genügt
    			else buf += test[i];
    
    	cout << (test = buf) << endl;
    


  • Danke euch Beiden. Das ganze funktioniert aller erste Sahne 😉

    Ich habe jetzt versucht das ganze im neuen Borland c++-builder laufen zu lassen und weiß nicht, wie ich die Borland-AnsiStrings in diese normalen Strings aus der <string.h> umwandeln kann.

    autor2 = Autor->Text;
    

    So funktioniert es jedenfalls nicht 😕

    autor2 wird durch [cpp]string autor2;[cpp] deklariert.

    Autor ist das TEdit-Eingabefeld.

    Vielen Dank

    Lusches



  • AnsiString b;
    string a=b.c_str();
    


  • Danke. Das ganze hat jetzt mit c_str() und t_str() funktioniert.

    Ich habe direkt schon das nächste Problem. Ich addiere zu einem String ein paar Zeichen und möchte dann noch einen anderen String anhängen.

    String test1, test2;

    test1+= "blub blub blub" + test2;

    bringt bei mir folgenden Fehler:

    [BCC32 Fehler] Unit1.cpp(69): E2096 Ungültige Strukturoperation

    test1+= "blub blub blub"
    

    alleine funktioniert, aber test2 wird nicht angehängt.

    Danke 😉

    Lusches


Anmelden zum Antworten