Text zwischen zwei bestimmten Zeichen löschen



  • Hallo zusammen,

    ich möchte gerne aus einem String den Text löschen, der zwischen zwei Vorkommen eines bestimmten Zeichens vorkommt. Dabei sollen auch die Zeichen gelöscht werden.

    Wenn dieses Zeichen z.B. ein $-Zeichen wäre und wir folgenden String hätten:

    "Aus diesem String muss der Text $ab089c$ raus!"
    

    Dann muss das Ergebnis folgendermassen aussehen:

    "Aus diesem String muss der Text raus!"
    

    Danke euch,

    Nico



  • Du kannst mit find() die beiden Vorkommen des Trennzeichens herausfinden und anschließend per erase() den Bereich dazwischen löschen.



  • #include <string>
    #include <iostream>
    
    void ReplaceAll(std::string& input, const std::string& search);
    
    int main()
    {
    	std::string x = "Aus diesem String muss der Text $ab089c$ raus! Bla blub $ab089c$ bla bla blub $ab089c$ $ab089c$ $ab089c$ bla$ab089c$...";
    
    	std::cout << x << "\n" << std::endl;
    
    	ReplaceAll(x, "$ab089c$");
    
    	std::cout << "Ergebnis:\n" << x << std::endl;
    
    	return 0;
    }
    
    void ReplaceAll(std::string& input, const std::string& search)
    {
    	std::size_t pos;
    
    	while ((pos = input.find(search)) != std::string::npos)
    	{
    		input.erase(pos, search.length());
    	}
    }
    

    Das Ergebnis ist aber

    "Aus diesem String muss der Text  raus!"
    

    und nicht

    "Aus diesem String muss der Text raus!"
    


  • dafür kann man dann aj ein zeichen mehr löschen in der letzten zeile bei dir...



  • Danke euch für eure Antworten erstmal! Die Sache hierbei ist nur es muss nicht unbedingt genau der Text ab089cab089c sein, der entfernt werden muss, sondern es kann zwischen den $-Zeichen beliebiger Text stehen.

    Also allgemein:

    "Aus diesem String muss der Text $xyz$ raus!"
    

    muss zu:

    "Aus diesem String muss der Text raus!"
    

    werden, wobei xyz für beliebigen Text stehen kann.

    Danke,

    Nico



  • Wie ich schon sagte: Startpunkt suchen, Endpunkt suchen, Bereich dazwischen löschen:

    size_t pos1 = str.find('$'), pos2 = str.find('$',pos1+1);
    str.erase(pos1,pos2-pos1+1);
    

    (zur Not in einer Schleife, um alle Vorkommen zu erwischen)



  • Danke CStoll und allen anderen,

    Nico


Anmelden zum Antworten