Leerzeichen aus Strings entfernen und Sonderzeichen ersetzten



  • Hi...
    wiedermal nen kleines Stringproblem von mir.
    Gibs ne einfache Möglichkeit in einem String der z.b. so aussehen kann,

    string Test = "Das ist   ein Teststring      mit     Leerzeichen~   und Sonderzecihen ~";
    

    die Leerzeichen und Sonderzeichen so hinzudrehen das mein Ergebniss am Ende so aussieht.

    "Das ist ein Teststring mit Leerzeichen \n und Sonderzeichen \n"
    

    Oder muss ich jede Stelle des Strings durchgehen und nachschaun ob Sonderzeichen und bei Leerzeichen schauen ob ich zuvor schon ein's hab oder net.



  • Tomjack schrieb:

    Oder muss ich jede Stelle des Strings durchgehen und nachschaun ob Sonderzeichen und bei Leerzeichen schauen ob ich zuvor schon ein's hab oder net.

    Ich kenne keine einfachere Möglichkeit.

    Caipi



  • Das ersetzten hab ich jetzt so gelöst:

    while(string.find("~") != string::npos)
       string.replace(string.find("~"), 1, "\n" );
    

    für die Leerzeichen hatte ich ne ähnlich Idee:

    while(string.find("  ") != string::npos)
       string.replace(string.find("  "), 2, " " );
    

    Leider hat das aber net funktioniert 😞



  • Also bei mir funktioniert folgendes:

    int main()
    {
            string str("DAS  IST EIN ~ STRING MIT  SONDERZEICHEN ~");
    
            while(str.find("~") != string::npos)
                    str.replace(str.find("~"), 1, "\n" );
    
            while(str.find("  ") != string::npos)
                    str.replace(str.find("  "), 2, " ");
    
            cout << "\n str: " << str << endl;
    
    }
    

    Caipi



  • Hier ist noch eine Lösung:

    (behandelt das ganze mit einem String über ein char-Array)

    #include <iostream>
    #include <cstdio>
    #include <string>
    
    int main(int argc, char *argv[])
    {
    char Text[100] = "\nDas   ~ist       ein Text   ~mit        Sonderzeichen       ~und Leerzeichen!";   // Das Char-Array
    
    cout <<"Text: (vorher)" << Text << endl;
    
    for(int index = 0;Text[index] != '\0';index++)         // ersetzt '~' durch '\n', durchsucht solange bis Ende des Strings erreicht ('\0')
    {
            if(Text[index] == '~')
            {
            Text[index] = '\n';
            }
    }
    
    for(int index = 0;Text[index] != '\0';index++)         // ersetzt 2 Leerzeichen nebeneinander durch ein einzelnes
    {                                                      // wenn zwei Leerzeichen gefunden wurden, sucht er nocheinmal nach 2 Leerzeichen nebeneinander
                                                           // und zwar solange bis keine 2 Leerzeichen mehr nebeneinander vorhanden sind!
    
            if(Text[index] == ' ' && Text[index+1] == ' ')  // wenn zwei Leerzeichen nebeneinander vorhanden...
            {
                int index2 = index+1;                 // setzt index2 auf eine Position vorraus zu index.
    
                for(index2;Text[index2] != '\0'; index2++)     // solange Ende des Char-Strings nicht erreicht
                {
                Text[index] = Text[index2];       // verengt den String um ein Zeichen, da alle Zeichen vor den ersten Leerzeichen um eins nach links im Array verschoben werden.
                index++;
                }
            Text[index2-1]= '\0';  // Ende des Strings wird nun eine Position kleiner, da ein Leerzeichen entfernt wurde.
            index = 0;             // Rücksetzung des ersten indexes erzwingt nochmalige Suche nach 2 Leerzeichen nebeneinander
            }
    }
    cout <<"Text: (nachher)" << Text << endl;
    system("pause");
    return 0;
    }
    

    Ich finde Char-Arrays als String selber für Weiterverarbeitung und dem ganzen Zeug viel nützlicher, deswegen biete ich hier eine Alternative zu String an. 😃

    Falls es einen interessiert...

    Searence


Anmelden zum Antworten