String beschneiden



  • Hallo,
    Ich habe einen string
    wie z.b.
    string test="[---test]

    Wie entferne ich nun die eckigen Klammern und die Striche?



  • find() und Konsorten können die richtige Stelle im String raussuchen, erase() löscht Zeichen (alternativ kannst du dir per substr() den Teil rausnehmen, der übrig bleiben soll).



  • Hi,

    hier ist nicht ganz klar, was Du willst:
    - Erstes und letztes Zeichen entfernen ( test.erase(0, 1); test.erase(test.length()-1); ((achtung: length() muss > 0 sein)) oder
    - alle/erstes '[' und ']' entfernen. ?

    Außerdem verstehe ich unter "Entfernen" nicht das Ersetzen durch Leerzeichen.

    Gruß,

    Simon2.



  • das 0te bis 3te Zeichen ([---) und das letzte(]) soll weg.
    Mit weg meine ich wirklich weg und nicht durch leerzeichen ersetzt.

    In meinem Programm stehen an der besagten Stelle zahlen, mit denen ich rechnen möchte.



  • A: Du schneidest die beiden Teile einfach ab:

    test.erase(0,3);// [--
    test.erase(test.length()-1); // ]
    

    B: Du holst dir den Mittelteil aus dem String heraus:

    test=test.substr(3,test.length()-4);
    


  • Hi,

    für das Entfernen aller Zeichen nutze ich gerne remove_if():

    #include <string>
    using std::string;
    #include <algorithm>
    using std::remove_if;
    
    bool unerwuenschteZeichen(char const& c) {
       return c == ']' || c == '[';
    }   
    
    int main() {
       string test = "[12345]7";
       test.erase(remove_if(test.begin(), test.end(), unerwuenschteZeichen), test.end());
       return 0;
    }
    

    Ein bischen blöd ist, dass remove_if() nicht direkt den string kürzt, aber das ist mit einem erase(..., end()) auch schnell gemacht.
    Dafür kann man netterweise die unerwuenschtenZeichen() sehr spät konfigurieren/erweitern.... und spart sich lästige find()-Schleifenorgien.

    Gruß,

    Simon2.


Anmelden zum Antworten