Probleme mit Feldern
-
Hi!
Habe folgende Funktion geschrieben:
#include <iostream> using namespace std; void ctob(char *a) { char *b, *c, *d; int count=0, i=0; b=a; while(*(b++)) count++; c=new char[count+1]; sprintf(c,"%i",count); for(int i=0; i<(count+1); i++) c[i+1]=a[i]; b=a; // hier ist mein Problem, wie kann // ich die Länge vorne einfügen } int main() { char *z = "Hallo"; cout << z << endl; ctob(z); cout << z << endl; return 0; }
Diese soll die Länge eines Strings messen und diese vor den String in den String reinschreiben. Nun, die Länge bekomme ich heraus, wandele Sie mit sprintf in ein ascii - Zeichen - nur wie schreib ich das dann an den Anfang der Zeichenkette??
Gruß
Tobi
-
Zunächst mal, char* z="Hallo"; ist ein string-literal und das ist Konstant. Da darfst du garnichts reinschreiben.
Dann würde ich das ganze wohl so machen (ungetestet):
void ctob(char* z, size_t max) { size_t len = strlen(z); char* temp = new char[len+1]; strcpy(temp,z); snprintf(z, max, "%i%s", len, temp); delete[] temp; } char z[20]; strcpy(z,"Hallo"); ctob(z, 20);
Aber lieber in C++:
#include <string> #include <stringstream> string ctob(const string& s) { stringstream tmp; tmp << s.length() << s; return tmp.str(); } string z = "Hallo"; z = ctob(z);
-
Danke! Aber
#include <stringstream>
kennt mein Compiler nicht. Geht's auch anders?
-
nimm <sstream>
-
Danke! Es klappt!