Zeichen im String ersetzen



  • Hi Leute,

    ich habe in C++ einen String "TEST1#*TEST2500#*TEST34#*TEST4". Die Zeichen #* möchte ich durch einen Zeilenumbruch ersetzen, so dass der String später in einer Datei oder Vector so gespeichert werden kann:
    TEST1
    TEST2500
    TEST34
    TEST4

    Kann mir jemand einen Tipp geben wie ich das programmieren kann.

    Vielen Dank in voraus.
    xthing



  • Du suchst nach "#", fügst an der Fundstelle ein Zeilenumbruch ein ("\n") und löschst die gefundene Zeichenfolge "#".



  • Hallo

    hatten wir schon öfters, zum Beispiel hier.

    bis bald
    akari



  • #include <iostream>
    #include <string>
    #include <algorithm>
    using namespace std;
    
    int main()
    {
      string v = "TEST1#*TEST2500#*TEST34#*TEST4";
    
      /**
       * find liefert die Position des ersten Vorkommens der übegebenen
       * Zeichenkette. Da diese ersetzt wird ist es nicht notwendig den
       * Bereich der durchsucht werden soll explizit anzugeben. Wenn kein
       * Fund vorliegt liefert die Funktion find string::npos zurück. Mit
       * Hilfe von replace(p, n, s) lässt sich die Zeichenkette an der
       * Position p bis zur Position p+n mit dem String s erzetzen.
      */
      int p;
      while ((p = v.find("#*")) != string::npos)
        v.replace(p, 2, "\n");
    
      cout << v << endl;
    
      return 0;
    
      /**
       * Ausgabe
       * TEST1
       * TEST2500
       * TEST34
       * TEST4
      */
    }
    


  • ich hab auch so ein problem 😞
    ich hab ein string, wo ich alle umlaute (äüöÄÜÖ...) ersetzen will. ich komm nicht weiter. kann mir da keiner helfen 😞 😕



  • Da kannst du die selbe Konstruktion wie oben anwenden:

    while(p=s.find("Ä") != string::npos)
      s.replace(p,1/*Länge von "Ä"*/,"Ae");
    

    wenn du mehrere Umlaute und Sonderzeichen suchen/ersetzen willst, kannst du sie auch in einer map<> zusammenfassen:

    map<string,string> ersatz;
    ersatz["ä"] = "ae";
    ersatz["ö"] = "oe";
    ...
    
    for(map<string,string>::iterator pos=ersatz.begin();pos!=ersatz.end();++pos)
    {
      size_t spos;
      while((spos = str.find(pos->first)) != string::npos)
        str.replace(spos,pos->first.size();pos->second());
    }
    

Anmelden zum Antworten