Ausgabestream in String umleiten
-
Wie kann ich meinen Ausgabestream z.B.
cout << "blabla" << zahl << endl;in einen String statt auf den Monitor umleiten?
Also gibt es praktisch sowas wie sprintf für C++ wo ich auch die Formatierungen von cout verwenden kann?
-
Du kannst als Ziel der Ausgabe einen beliebigen ostream angeben (an der Stelle, wo dort das cout steht) - also auch einen ostringstream.
-
man kann also auch einen stream für nen string erstellen????
hat da mal wer nen link zu ner doku oderso?

-
Ja, kann man - das nennt sich dann (wer hätte das gedacht ;))
stringstream. (für einen ersten Überblick kannst du meinen Magazin-Artikel zur Ein-/Ausgabe durchlesen)
-
Das heißt, da schreib ich in nen string irgendwas rein oder was? Ist ja cool

-
Ja, wer hätte das gedacht:
ostringstream buffer; //schreiben in String-Stream: buffer<<"bla:"<<4711; //hol dir den geschriebenen String: cout<<"geschrieben wurde "<<buffer.str();
-
http://www.cpp-tutor.de/cpp/le06/le06_03.htm
hier ist das ganze auch noch gut erklärt
-
Gibt es da auch eine einfachere Methode um das ganze in ein char-array zu packen?
-
Es gibt noch eine Klasse strstream, aber die ist etwas unhandlicher (vor allem wegen der Frage, wem wann der verwendete Speicher gehört). Besser ist es, du nimmst am Ende den string, den du gefüllt hast, und holst dir sein char-Array:
ostringstream buffer; ...//reinschreiben string bufdata=buffer.str(); machwas(bufdata.c_str());
-
Nimlot schrieb:
Gibt es da auch eine einfachere Methode um das ganze in ein char-array zu packen?
Ja gibt es:
#include <iostream> #include <algorithm> // fill_n #include <streambuf> class MemBuf : public std::streambuf { public: MemBuf( char* von, char* bis ) { setp( von, bis ); } }; int main() { using namespace std; const size_t N = 200; char arr[N]; fill_n( arr, N, char(0) ); // bei char[] muss man sich um alles selber kümmern MemBuf mb( arr, arr + N - 1 ); // '- 1' damit mind. eine Null am Ende erhalten bleibt streambuf* const oldSb = cout.rdbuf( &mb ); // Ausgabe von cout auf arr[] umleiten // -- irgendein Programm mit Augaben auf cout for( int i =9; i< 13; ++i ) cout << "Eine Zahl " << i << endl; // ggf cout.clear() aufrufen, falls arr-overflow cout.rdbuf( oldSb ); // Umleitung rückgängig machen // Jetzt ist die ganze Ausgabe in 'arr' cout << "/---------------\n" << arr << "---------------/" << endl; return 0; }Frage: was soll das alles im Array? Am besten man ändert den abgeleiteten streambuf (hier MemBuf) gleich so, dass die Ausgabe da landet, wo sie hingehört.
Gruß
Werner
-
@Werner: Warum selber schreiben - es gibt doch std::strstream
(die char*-Version von stringstream)