Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

1

15.04.2007, 14:13

Grundlagen: Zahl in String?

Uups! Schon wieder fehlt es mir an grundlagen!

Gibt es eine Funktion die eine Zahl(float/int) in einen String konvertiert?

Ich hab nämlich ehrlich gesagt keine lust mir selber sowas zu schreiben... falls jemand schon code kennt, wie man sich sowas selber machen kann wärs natürlich noch besser...(dann muss ich net mehr denken wenn ich meine String klasse zum template mache^^)


mfg,

Faule Socke

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

2

15.04.2007, 14:25

http://www.s11n.net/papers/lexical_casting.html

okay...hab noch mal was gefunden...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
   // Casts für Zahl<->String und co. 

template<typename A, typename T> inline const A lexical_cast (const T& source)    
{ 
    std::basic_stringstream<char> s; 
    A destination; 

    if (!(s << source) || !(s >> destination) || !(s >> std::ws).eof()) 
        throw "bad lexical cast"; 

    return (destination); 
} 

Phili

unregistriert

3

15.04.2007, 14:31

sprintf_s wenn du sowas in der Art meinst...

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

4

15.04.2007, 14:36

Danke!

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

5

15.04.2007, 14:38

achso...

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

6

15.04.2007, 14:43

ich empfehle Fireflys Variante statt sprint_s.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

7

15.04.2007, 15:22

Hi!

Boost bietet eine bessere Implementation von lexical_cast an. Wird genauso verwendet:

C-/C++-Quelltext

1
std::string foo = boost::lexical_cast< std::string, float >( 3.1415f );


Ansonsten halt per std::ostringstream oder std::ostrstream. Alle C Lösungen wie sprintf usw würde ich nicht empfehlen.

grüße
@D13_Dreinig

Phili

unregistriert

8

15.04.2007, 15:40

Aus interesse: Was habt ihr gegen sprintf_s?
Ist totaler Standard, man brauht keine extra-sachen und es funktioniert...

9

15.04.2007, 15:42

C-Style
Edit
phpBB2 ist dumm. Man darf nicht nur C schreiben ^^ da meckert der das der Post zu kurz wäre :(
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

10

15.04.2007, 15:43

Veraltet, Typenunsicher, führt schnell zu unerwünschtem Verhalten, ...
Statt boost::lexical_cast kann man firefly's Methode natürlich auch verwenden, aber bisschen optimiert.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
namespace
{
    template< typename T >
    struct char_type
    {
        typedef char type;
    };

    template<>
    struct char_type< wchar_t >
    {
        typedef wchar_t type;
    };

    template<>
    struct char_type< wchar_t* >
    {
        typedef wchar_t type;
    };

    template<>
    struct char_type< const wchar_t* >
    {
        typedef wchar_t type;
    };

    template<>
    struct char_type< std::wstring >
    {
        typedef wchar_t type;
    };
}

template< typename Dest, typename Source >
Dest lexical_cast( const Source& src )
{
    std::basic_stringstream< char_type< Dest >::type > cnv;
    Dest result;

    if ( !( cnv << src && cnv >> result && ( cnv >> std::ws ).eof() ) )
    {
        throw std::bad_cast( "lexical_cast failed" );
    }

    return result;
}


grüße
@D13_Dreinig

Werbeanzeige