Angenommen, Sie haben so etwas wie:wie die Breite von ganzzahligen Typen mit std :: ostringstream abgeschnitten wird?
std::ostringstream oss;
int value(42);
oss.fill('0');
oss << std::setw(3) << value;
cout << oss.str();
OUTPUT: 042
Dieser Ausgang ist da std :: setw eine Mindestbreite gewährleistet, und wir sagten, den Strom mit 0 zu füllen aber wie macht man das Gegenteil und geben Sie eine maximale Breite, so dass Anzeige in AWL und native C++ vorzugsweise abgeschnitten ...
Zur Zeit habe ich etwas, das ich einen hässlichen und ineffizient Hack betrachten:
std::ostringstream oss;
int value(1239999);
oss.fill('0');
oss << std::setw(3) << boost::lexical_cast<std::string, int>(value).substr(0, 3);
cout << oss.str();
OUTPUT: 123
ich boost :: Format geschaut haben, aber es ist es die gleiche Geschichte, soweit ich keine Möglichkeit, es sagen kann, ist diese „hübsch“ zu tun ... irgendwelche Vorschläge?
UPDATE: std :: ostringstream und STL-Streams im Allgemeinen sind bekannt, langsam im Vergleich zu anderen Containern und Vorlagenobjekte von STL durchzuführen. Vielleicht wäre es besser, ein Nachrichtenwarteschlangenobjekt zu erstellen, das eine std :: -Warteschlange umschließt und intern verwendet und dann einfach sprintf_s für Formatierungszwecke verwendet?
Wie kann es richtig sein, dass '" 123 "' eine korrekte Darstellung von '123' und' 1239999' ist? Wenn das wahr ist, glaube ich nicht, dass Sie wirklich Ganzzahlen haben. – SingleNegationElimination
Dies ist eine einfache Darstellung außerhalb des Kontexts, um das Problem zu verdeutlichen ... In der tatsächlichen Verwendung repräsentiert der Wert Bruchteile Sekunden eines Posix-Zeitobjekts, das als Teil eines Zeitstempels für den Eintrag protokolliert wird, der bei den meisten Betriebssystemen hinter den 3 Ziffern ungenau ist , verschwendet Speicherplatz und erschwert das Lesen des Protokolls. – AJG85