suche sprintf ersatz
-
kJunkie schrieb:
CStoll schrieb:
]so finde ich das zumindest übersichtlicher als deine Variante.
ja das ist dann schon fast eine geschmackssache
bzw. meine variante wäre dann was für extrem sprintf geschädigte was gewesen 
Ja, das kenne ich - ich muß auch immer zwischen dem Syntax für TRACE() und der iostream-Ausgabe umdenken

-
CStoll (off) schrieb:
kJunkie schrieb:
CStoll schrieb:
]so finde ich das zumindest übersichtlicher als deine Variante.
ja das ist dann schon fast eine geschmackssache
bzw. meine variante wäre dann was für extrem sprintf geschädigte was gewesen 
Ja, das kenne ich - ich muß auch immer zwischen dem Syntax für TRACE() und der iostream-Ausgabe umdenken

wobei mir jetzt eine steigerung eingefallen ist für die ganze sache, kann man so eine art zellen machen, wo auch ein zeilenumbruch autoamtisch gemacht wird
1 ich bin ein schmaler 300,-- text mit automatischen zeilenumbruch 2 soetwas wäre echt eine 300,-- feine sachedas wird wohl den rahmen von den standard geschichten sprengen bzw. ich finde halt nichts für so eine verwendung

-
Also rein mit Standard-Mitteln wirst du das ziemlich sicher nicht hinbekommen - da die iostreams zeichenweise schreiben bzw. lesen. Aber du kannst dir sicher in der Vorverarbeitung deine Strings entsprechend zerlegen und umordnen.
struct line { int num; string desc; int price; } ostream& operator<<(ostream& sout,const line& data) { vector<string> desc_split; for(int i=0;i<data.desc.length();i+=40) desc_split.push_back(data.desc.substr(i,i+40); sout<<setw(5)<<data.num<<setw(40)<<desc_split[0]<<setw(5)<<data.price<<",--\n"; for(int i=1;i<desc_split.size();++i) sout<<" "<<setw(40)<<desc_split[i]<<"\n"; return sout; }(nur mal ein Ansatz - das Aufsplitten der Zeile kann man sicher eleganter lösen und die Spaltenbreiten sollten letztendlich nicht festverdrahtet werden)
-
danke für den vorschlag! dieser vorschlag gefällt mir sehr gut

danke für deine tolle unterstützung!
-
entweder bin ich zu dumm oder mittels der width methode wird die eingabe nicht auf die gewünschte zeichenanzahl beschnitten?!
ähnliches problem schon mal wer gehabt??
-
kJunkie schrieb:
entweder bin ich zu dumm oder mittels der width methode wird die eingabe nicht auf die gewünschte zeichenanzahl beschnitten?!
Das liegt daran, dass width die minimale, nicht die maximale Feldbreite fest legt.
-
width() wirkt sich immer nur auf die unmittelbar darauffolgende stringausgabe aus. du mußt also vor jeden string ein width() stellen.
klingt umständlich, ist aber eigentlich ganz praktisch.
width() kürzt den string nicht. wilst du eine maximallänge angeben, dann mußt du zusätzlich noch cout.precision(max_laenge) verwenden.
-
danke für die hilfestellung bzgl. width!
@precision wirkt sicht leider bei cout bzw. stringstreams nur bei zahlen aus

-
kJunkie schrieb:
@precision wirkt sicht leider bei cout bzw. stringstreams nur bei zahlen aus

In dem Fall mußt du womöglich für string-Werte improvisieren:
template<typename T> void print_lim(ostream& sout, const T& val, int len=-1) { if(len<0) len=sout.precision(); stringstream tmp; //Anmerkung: Eventuell sollte tmp noch den übrigen Stream-Status (width, flags,...) von sout übernehmen. tmp<<val; sout<<tmp.str.substr(0,len); }
-
das gefällt mir sehr gut! wow danke!