CString doppelte Leerzeichen entfernen



  • Hat jemand eine kleine Funktion mit der doppelte Leerzeichen aus einem CString entfernt werden?

    Ich weis, dass es mit dem normalen String bzw. mit std::string so in etwa geht:

    for ( int a = 0; a < string.size(); a++ )
    {
            if ( string.at(a) == ' ' )
    	{
    		a++;
    		if( string.at(a) == ' ' )
    		{
    			string.erase(a,1);
    			a -= 1;
    	        }
    	}
    }
    

    Schöne Schleife die den string durchläuft. Ich möchte dasselbe aber mit einem CString machen.



  • Schau dir mal Find(_T(" ")) und Replace an. 🙂


  • Mod

    Zwar nicht super effektiv, wenn mehr als 2 Leerzeichen auftreten, aber simpel:

    CString str(_T("123  45   67778");
    while (str.Replace(_T("  "),_T(" ")))
     ;
    

    Es ist aber in jedem Fall effektiver, als jedes überflüssige Leerzeichen einzeln zu löschen...



  • In einem std>>string würde ich eher unique() anstelle einer handgeschriebenen Lösung verwenden, bei CString while(str.Replace(" "," ")>0); .



  • Jo, cool danke, es klappt.
    An Replace hatte ich schon gedacht, aber ich wollte auch fälle wo mehr als 2 Leerzeichen hintereinander auftreten zu 1 zusammenschrumpfen. Da habe ich mich oben vielleicht ein bisschen unklar ausgedrückt.



  • Deswegen ja auch das Find. Solange er zwei Leerzeichen hintereinander findet wird eben ersetzt. 😉
    Ich hatte nicht an den Rückgabewert vom Replace gedacht.



  • RunSeb schrieb:

    An Replace hatte ich schon gedacht, aber ich wollte auch fälle wo mehr als 2 Leerzeichen hintereinander auftreten zu 1 zusammenschrumpfen.

    Dazu wird Replace() halt in eine Schleife gepackt - wir wiederholen den Durchlauf so lange, wie noch doppelte Leerzeichen entdeckt (und ersetzt) werden konnten.

    (wobei - man sollte eigentlich auch std::unique() auf CStrings loslassen können)


Anmelden zum Antworten