Stringklasse
-
Abend zusammen, ich sitze gerade am += Operator meiner Stringklasse. Sieht im Moment so aus (gekürzte Fassung ohne Zeigerprüfung und Co.)
MYSTRING& operator += ( const char *s ) { ... size_t n = strlen( s ); char *pTmp = new char[n +m_nSize +1]; ... strcat( pTmp, m_pData ); strcat( pTmp, s ); ... delete [] m_pData; m_pData = pTmp; ... return *this; }Kann man das ganze noch etwas C++ konformer machen (speziell wegen strcat)? - und wenn ja wie?
-
ich habe sprintf verwendet, ist aber auch nicht so der hit. suche auch nach einer besseren lösung.
MYSTRING& operator += ( const char *s ) { sprintf(m_pData, "%s%s", m_pData, s); return *this; }der vorteil ich habe den operator überladen für mehrere typen, somit ist das
inttostring kein problem mehr.MYSTRING& operator += (int i) { sprintf(m_pData, "%s%d", m_pData, i); return *this; }
-
Danke für die Antwort. Werde dann wohl vorerst bei strcat bleiben. strcat ist in meinem Fall dann doch etwas schneller als sprintf.
-
Vielleicht mal überlegen, was strncat eigentlich macht ?
Und dann kannst du dir selber was eventuell schnelleres
zum kopieren bauen.
-
Statt strcat kannst Du std::copy verwenden:
#include <algorithm> ... std::copy( m_pData, m_pData + m_nSize, pTmp); std::copy( s, s + n + 1, pTmp + m_nSize);Allerdings musst dann selbst aufpassen, wie und wo Dein \0 mitkopiert wird (strcat macht das für Dich, copy nicht). Wenn m_nSize inklusive \0 ist, dann musst Du ein Element weniger kopieren.
In Deinem Beispielcode verlässt Du Dich darauf, dass in pTmp[0] = '\0' ist. Ansonsten hat das erste strcat nicht den gewünschten Erfolg. Besser wäre es beim ersten Kopieren ein strcpy zu nehmen.