[C++] string en doubles enzo

Pagina: 1
Acties:

  • Sjonny
  • Registratie: Maart 2001
  • Laatst online: 08-07 20:20
ok, ik probeer dus een double (of een int ofzo) in een string te krijgen, maar het wil niet helemaal:
code:
1
2
3
4
5
6
7
8
9
10
double crap = 12.45;
string blaat(crap);     // dit werkt dus niet.
blaat << crap;      // zo iets grappigs werkt ook niet.
ostrstream s(blaat);    // ipv s(char*, int strsize) werkt ook niet.
s << crap;        // heeft dan ook geen zin.

/* ranzige c/c++ manier waar ik dus vanaf wil: */
char tmp[256];
sprintf(tmp, "%f", crap);
blaat = crap;

kortom, ik zoek iets van sprintf, maar dan voor een string van STL.

The problem is in the part of your brain that handles intelligence.


  • Quorton
  • Registratie: Januari 2001
  • Laatst online: 31-05 14:12
Wat is er zo ranzig aan die C++ manier ?

Quadcore 6600 @ 3,3Ghz, 4 GB, 2 TB raid 5, GF 8400GS
P4 2.8G, 2 GB, 500GB diskspace, GF FX5200


  • Sjonny
  • Registratie: Maart 2001
  • Laatst online: 08-07 20:20
dat het eerst in een char* gedumpt wordt en daarna pas in me string, en niet rechtstreeks.
ohja, en dat ik ook weer stdio.h moet includen voor sprintf

The problem is in the part of your brain that handles intelligence.


  • Quorton
  • Registratie: Januari 2001
  • Laatst online: 31-05 14:12
nou en dat het niet rechtstreeks gaat, als
ostrstream s(blaat);
s << crap;
gewerkt had, was het ook niet rechtstreeks geweest.
Waarom moeilijk doen als het makkelijk kan.

Quadcore 6600 @ 3,3Ghz, 4 GB, 2 TB raid 5, GF 8400GS
P4 2.8G, 2 GB, 500GB diskspace, GF FX5200


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 12-06 11:45
Op woensdag 20 maart 2002 15:13 schreef Sjonny het volgende:
ok, ik probeer dus een double (of een int ofzo) in een string te krijgen, maar het wil niet helemaal:
code:
1
2
3
4
5
6
7
8
9
10
double crap = 12.45;
string blaat(crap);     // dit werkt dus niet.
blaat << crap;      // zo iets grappigs werkt ook niet.
ostrstream s(blaat);    // ipv s(char*, int strsize) werkt ook niet.
s << crap;        // heeft dan ook geen zin.

/* ranzige c/c++ manier waar ik dus vanaf wil: */
char tmp[256];
sprintf(tmp, "%f", crap);
blaat = crap;

kortom, ik zoek iets van sprintf, maar dan voor een string van STL.
1) boost::lexical_cast<std::string>() converteert alles naar een string. Zie www.boost.org
2) En die doet intern een ostringstream << crap,
return ostringstream.str() Dus ostringstream s; s << crap; blaat = s.str() werkt (maar meestal heb je blaat als variabele helemaal niet meer nodig)
3) En als ik me goed herinner is er ook een versie voor oude GCC.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Primal
  • Registratie: Augustus 2001
  • Laatst online: 03-07 23:15
Op woensdag 20 maart 2002 15:33 schreef Sjonny het volgende:
dat het eerst in een char* gedumpt wordt en daarna pas in me string, en niet rechtstreeks.
ohja, en dat ik ook weer stdio.h moet includen voor sprintf
Uhm, ik weet niet of je OOIT hebt gekeken hoe die C++ functies/operators voor dit soort acties zijn geïmplementeerd?! Nee, nou als ik zeg dat 99% van deze functies uiteindelijk zijn gebasseerd op de old-style C functies overdrijf ik niet. Maar misschien bedoel je dat het je code wat 'lelijk' maakt of niet? :) Dan moet ik je inderdaad wel gelijk geven, alhoewel ik van nature toch echt een die-hard C-er ben :)

"The fastest code, is the code that is never called."


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op woensdag 20 maart 2002 20:34 schreef Primal het volgende:

[..]

Uhm, ik weet niet of je OOIT hebt gekeken hoe die C++ functies/operators voor dit soort acties zijn geïmplementeerd?! Nee, nou als ik zeg dat 99% van deze functies uiteindelijk zijn gebasseerd op de old-style C functies overdrijf ik niet. Maar misschien bedoel je dat het je code wat 'lelijk' maakt of niet? :) Dan moet ik je inderdaad wel gelijk geven, alhoewel ik van nature toch echt een die-hard C-er ben :)
Hoe kom je bij dat getal?
de stream classes (en bv de std::string) gebruiken echt geen sprintf()-je om hun doel te bereiken.
Die zijn van de grond af opgebouwd, op een OO / C++ manier.

  • Sjonny
  • Registratie: Maart 2001
  • Laatst online: 08-07 20:20
hmm.. op het web ben ik wel meer libs tegen gekomen die dit soort fratsen uithalen, maar zat ik niet echt op te wachten. dan ben ik nog blijer met die sprintf ertussen.

The problem is in the part of your brain that handles intelligence.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 12-06 11:45
Op woensdag 20 maart 2002 20:34 schreef Primal het volgende:

[..]

Uhm, ik weet niet of je OOIT hebt gekeken hoe die C++ functies/operators voor dit soort acties zijn geïmplementeerd?! Nee, nou als ik zeg dat 99% van deze functies uiteindelijk zijn gebasseerd op de old-style C functies overdrijf ik niet. [/sub]
Ja - en je hebt het mis. Stringstreams zijn gewoon net zoals alle streams geimplementeerd, en dat is zonder sprintf(). Dat kan ook niet; streams werken wel voor wchar_t en sprintf() niet.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1