Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » std::stringstream und Tausendertrennzeichen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
19.10.2008, 14:54 Uhr
zac



Hallo,

Gibt es eine Standard-konforme Möglichkeit, std::stringstream (ohne ändern der locale) davon zu überzeugen, keine Tausendertrennzeichen in dezimale Integer einzufügen?
Ich brauche das, weil ich aus der Prozessid unter Linux den Pfad zu "/proc/PROCESSID" brauche...
Bisher ist der einzige Weg den ich habe der auch funktioniert, stringstream für die Konvertierung durch sprintf(buffer,"%d",processId) zu ersetzen (itoa u.ä. gehören ja nicht zum Standard).

Viele Grüße
zac
--
mov eax,0f9h
push 2
push 2
mov edx,esp
int 2eh
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.10.2008, 20:11 Uhr
0xdeadbeef
Gott
(Operator)



C++:
std::ostringstream out;
out.imbue(std::locale("C"));


...sollte es eigentlich tun. Interessant ist dabei eigentlich eher, dass er sich die Systemlocale automatisch holt, und das ohne, dass du mit setlocale rumgespielt hättest. (was auch sprintf beeinflussen sollte)
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.10.2008, 20:25 Uhr
zac



Ich benutze ja die locale, das hat mich ja eher weniger verwundert. Ich hatte mich nur gefragt ob es vielleicht ein Flag o.ä. gibt, womit sich Tausendertrennzeichen da einfach abschalten lassen...
sprintf lässt sich allerdings scheinbar nicht von der locale beeinflussen, was das mit den Tausendertrennzeichen angeht... (locale::global(...)) ruft ja auch setlocale mit dem entsprechenden String auf...

Der Weg mit imbue ist mir auch eingefallen, allerdings ist es doch relativ aufwändig, eine locale aus dem String zu bilden (zumindest wenn ich mich recht an die Dokumentation erinnere, die ich mal dazu gelesen habe). Ich nehme mal an es wird einfacher sein in der Klasse die ich für die einzelnen Locales und Sprachen so oder so schon habe eine globale Instanz der "C"-locale zu speichern und dann jedes Mal zu holen. Oder weiterhin sprintf zu benutzen, was ja, wenn ich das richtig sehe, keine gute Idee ist, wenn das nun von der Plattform abhängt, ob das sich nun an die globale C++-locale hält oder nicht.

Edit:
Naja... mit der globalen Instanz der "C"-Locale funktioniert das jetzt jedenfalls wunderbar ohne größeren Aufwand.
--
mov eax,0f9h
push 2
push 2
mov edx,esp
int 2eh

Dieser Post wurde am 19.10.2008 um 21:07 Uhr von zac editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: