Ersetzen Funktion für Strings



  • 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


Anmelden zum Antworten