Ersetzen Funktion für Strings



  • Hallo Leute,

    ich bin mir sicher, dass diese Frage schonmal gestellt wurde, aber über die Suche hab ich nichts gefunden was mir weiterhilft.

    Ich arbeite mit string Zeichenketten und teilweise mit nullterminierten char-arrays für die WinApi.

    Ich suche nun eine Funkion die eine bestimmte Zeichenfolge in der Zeichenkette mit einer beliebig langen anderen Kette ersetzt.

    Bis jetzt habe ich nur Funktionen gefunden die 1 Zeichen ersetzen, was ja auch relativ simpel ist...

    -MfG, Rodney 😉



  • Ich denke, die Funktion musst du dir selber schreiben.
    Sollte aber recht einfach sein.

    STL Strings:
    1. mit der string-Methode "find" die Position finden
    2. mit der Methode "Insert" den neuen Zusatzstring einfügen



  • SeppSchrot schrieb:

    Ich denke, die Funktion musst du dir selber schreiben.
    Sollte aber recht einfach sein.

    STL Strings:
    1. mit der string-Methode "find" die Position finden
    2. mit der Methode "Insert" den neuen Zusatzstring einfügen

    aber der String, den ich suche, kann ja auch länger als 1 Zeiche sein...



  • Mit std::string::find kannste auch nach Zeichenketten suchen. std::string::replace bietet die Möglichkeit komplette Zeichenketten durch andere (auch längere oder kürzere) zu ersetzen.

    MfG Jester



  • Jester schrieb:

    Mit std::string::find kannste auch nach Zeichenketten suchen. std::string::replace bietet die Möglichkeit komplette Zeichenketten durch andere (auch längere oder kürzere) zu ersetzen.

    MfG Jester

    wie wendet man die Funktion denn an`?



  • Hi,

    Also wenn ich das richtig verstehe soll das ungefähr so sein:

    std::string orginal = "Das ist ein Satz. Und da ist irgendwas drin."
    std::string search = "Satz";
    std::string replace = "Schatz";

    replace_string(orginal,search,replace);

    -> orginal ist jetzt "Das ist ein Schatz. Und da ist irgendwas drin."

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    bool replace_string(
                        std::string& orginal, 
                        std::string& search_string, 
                        std::string& replace_string
                       );
    
    int main(int argc, char *argv[])
    {
      string orginal = "Dies ist ein Satz und dieser beinhaltet irgendwas.";
      string searchphrase = "Satz";
      string replacestring = "Schatz";
    
      cout << orginal << endl;
    
      cout << "ersetze..." << endl;
      if(replace_string(orginal,searchphrase,replacestring))
         cout << orginal << endl;  
      else
         cout << "Not found" << endl;
    
      return 0;
    }
    
    bool replace_string(
                        std::string& orginal, 
                        std::string& search_string, 
                        std::string& replace_string
                       )
    {
      if(orginal.find(search_string) != string::npos)
         orginal.replace(orginal.find(search_string),search_string.size(),replace_string);  
      else 
         return false;
      return true;
    }
    

    MfG



  • Schönes Beispiel, aber warum rufst Du zweimal find auf? Das ist unnötig teuer. Lieber den iterator merken.

    MfG Jester



  • hi,

    Jester: stimmt, hab das nur mal eben zusammen gefitzelt.

    Hier die abwandlung:

    bool replace_string(
                        std::string& orginal,
                        std::string& search_string,
                        std::string& replace_string
                       )
    {
      std::string::size_type pos = orginal.find(search_string);
      if(pos != std::string::npos)
         orginal.replace(pos,search_string.size(),replace_string);  
      else
         return false;
      return true;
    }
    




  • HumeSikkins schrieb:

    FAQ: http://www.c-plusplus.net/forum/viewtopic.php?t=39468

    Aber eine sehr umständliche Variante...

    Warum wird den der Teil-String überhaupt gelöscht? Bei mir wird er einfach überschrieben....

    MfG



  • Wird er dort doch auch. Das erste Beispiel sucht nur, das zweit löscht und das dritte ersetzt. Etwas umfangreicher ist es, weil dort alle Vorkommen und nicht nur das erste ersetzt wird. Das ist ein kleines bißchen komplizierter, weil man daa schöne Fehler machen kann. Kannst es ja mal implementieren. 😉



  • Ach ja, mal wieder ein Fall von: "Wer lesen kann ist klar im Vorteil..." *g*

    Ich sollte mir echt angewöhnen erst mal richtig zu lesen und dann zu schreiben ...
    *g*

    MfG


Log in to reply