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


Anmelden zum Antworten