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

02.01.2008, 14:34

Problem mit stringstream's

Hi,

da es mich aufregt, dass ich teilweise immernoch alte C-Techniken anwende(wie z.b. sprintf), habe ich grade mal versucht mich mit stringstreams zu beschäftigen. Meine bisherigen versuche sind immer an der Objekterzeugung gescheitert, das hat diesmal geklappt, da ich meine offline msdn zu rate gezogen habe.
Um mein problem zu verstehen solltet ihr den quellcode angucken:

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
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main()
{
    string          Buffer;
    stringstream    Stream(Buffer);
    int             i   =   456;
    float           f   =   123.456f;

    // Fill

    cout << "Buffer contains: " << Buffer << endl;
    Stream << "Hi du ";
    cout << "Buffer contains now: " << Buffer << endl;
    Stream << 123;
    cout << "Buffer contains now: " << Buffer << endl;
    Stream << i;
    cout << "Buffer contains now: " << Buffer << endl;
    Stream << f;
    cout << "Buffer contains now: " << Buffer << endl;
    Stream << "Ei!";
    cout << "Buffer contains now: " << Buffer << endl;
    cin.sync();
    cin.get();

    return 0;
}


Die Ausgabe sieht wie folgt aus:

Quellcode

1
2
3
4
5
6
Buffer contains:
Buffer contains now:
Buffer contains now:
Buffer contains now:
Buffer contains now:
Buffer contains now:


Nun was mache ich falsch?

Socke

2

02.01.2008, 14:49

Hmm das ist relativ simpel. Du verstehst das Prinzip nicht ganz ;)

So wie es aussieht scheint mir als würdest du denken, dass du per Konstruktor (std::stringstream ss(Buffer)) eine String sozusagen verknüpfen kannst. Das ist nicht der Fall ;)
Per std::stringstream::str kannst du dir ein std::string aus dem stream holen.

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
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main()
{
    
    std::ostringstream ss;
    const int i(456);
    const float f(123.456f);

    // Fill

    std::cout << "Buffer contains: " << ss.str() << std::endl;
    ss << "Hi du ";
    std::cout << "Buffer contains: " << ss.str() << std::endl;
    ss << 123;
    std::cout << "Buffer contains: " << ss.str() << std::endl;
    ss << i;
    std::cout << "Buffer contains: " << ss.str() << std::endl;
    ss << f;
    std::cout << "Buffer contains: " << ss.str() << std::endl;
    ss << "Ei!";
    std::cout << "Buffer contains: " << ss.str() << std::endl;
    
    std::cin.get();
}
. Wenn du aber wirklich wissen willst, was im Buffer der Stringstream Instanz steht, musst du rdbuf() ausgeben ;)

C-/C++-Quelltext

1
2
3
std::ostringstream ss;
ss << 100;
std::cout << ss.rdbuf() << std::endl;
. Denn diese Art von Stream arbeitet intern mit einen Buffer (s. z.B. std::fstream => basic_filebuf http://www.dinkumware.com/manuals/default.aspx?manual=compleat&page=fstream.html#basic_filebuf)
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