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.
-
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)