C-String mit Zahlen kombinieren?
-
Hallöchen,
ich möchte gern C-Strings, also char arrays mit Zahlen kombinieren (int, long, float, double, was es sonst alles gibt).
Das ganze soll etwa diese Form haben:
Ich übergebe als Parameter etwas in dieser Form:
"Inhalt der Variable: " + variable + " und Variable b: " + variable2 + "." //variable = int, variable2 = float
Und in einen Char-Array bzw. Speicherbuffer soll dieses hier geschrieben werden:
Inhalt der Variable: 3748292 und die Variable b: 384.29312.
Das ist gedacht zur Ausgabe von Debug-Werten. Nur ich möchte das möglichst leicht zu handhaben und flexibel machen und daher nicht unbedingt auf sprintf zurückgreifen. Also man sollte C-Strings mit Variablen kombinieren können mittels + Operator. Lässt sich das vielleicht irgendwie handlen, mit Operatoren-Überladung vielleicht (Kenn mich damit kaum aus und weiß nicht wozu man das alles nehmen kann).
mfg.
Ynnus
-
mach ne eigene string klasse und schreib diverse + operatoren rein
operator + ( int );
operator + ( char* );etc...
-
#include <sstream> #include <string> using namespace std; // ... ostringstream osstr; string s; double d = 3.141; int i = 123; osstr << "d = " << d << " und i = " << i; s = osstr.str(); // s == "d = 3.141 und i = 123"
-
Warum nicht einfach
char buffer[200]; sprintf (buffer, "Inhalt der Variable: %d und die Variable b: %f", variable, variable2);
Ist eigentlich genau dafür gedacht und sicherlich weniger umständlich als die Operatorüberladung.
Verflixt: Schon wieder zu langsam. So wie bei 0xdeadbeef geht's natürlich auch.
-
Die printf Geschichten gehören eher der C-Zeit an. Und da wir im C++ Forum sind....
Nein, aber printf haftet immer dieser Buffer-Overflow-Beigeschmack an. Zudem ist es recht unflexibel, sobald man über die Built-In-Types hinweggeht. Da sind benutzerdefinierte Stream-Operatoren viel schöner.
Und vor allem, das benutzen von Streams ist typsicherer. Vorbei sind die Zeiten, wo Format-String und Argumente nicht zusammenpassen und unmögliche Fehler produzieren..
-
0xdeadbeef schrieb:
#include <sstream> #include <string> using namespace std; // ... ostringstream osstr; string s; double d = 3.141; int i = 123; osstr << "d = " << d << " und i = " << i; s = osstr.str(); // s == "d = 3.141 und i = 123"
Kann man das irgendwie einrichten, dass man eine Funktion hat welche einen Parameter hat der diese Stream-Zeile annimmt: "d = " << d << " und i = " << i ?
Wenn ich eine Funktion erstelle und als Parameter nur ostringstream nehme, gibts einen Fehler, dass keine geeignete Funktion gefunden wurde...