извлечение струнного потока не работает - PullRequest
2 голосов
/ 20 июля 2009

Кажется, у меня проблема с извлечением данных из потока строк. Кажется, в начале моего извлечения отсутствуют первые два символа.

У меня есть что-то похожее на следующий код:

    std::stringstream ss(
    std::stringstream::in |
    std::stringstream::out
    );

    bool bValid;
    double dValue;
    double dTime;

    for( (int i = 0; i < 5; i++ )
    {
        bValid = getValid();
        dValue = getValue();
        dTime = getTime();

        // add data to stream
        ss << bValid;
        ss << dValue;
        ss << dTime;
    }

    int strsize = ss.str().size();
    char* data = new char[strsize];
    std::strcpy(data, ss.str().c_str());

    // then do stuff with data
    // ...... store data in an Xml Node as CDATA

    // read data back
    std::stringstream ssnew( std::stringstream in | std::stringstream out );
    ss.clear();
    ss << getCharData(); // returns a char* and puts it in stream.

    for( int i = 0; i < 5; i++ )
    {
        ssnew >> bValid;  // do something with bValid
        ssnew >> dValue;  // do something with dValue
        ssnew >> dTime;   // do something with dTime
    }

У меня проблема с тем, что при использовании оператора извлечения при чтении данных из «ssnew» кажется, что пропускаются первые два символа. В отладчике, например, он показывает, что поток строк имеет «001.111.62.2003 ... и т. Д.». Однако после первого «ssnew >> bValid» bValid становится «истиной», а dValue становится «0,111», а dTime становится «0,62», указывая, что первые два нуля в потоке игнорируются. Почему это не начинается в начале потока?

Ура, Сет

Ответы [ 2 ]

2 голосов
/ 20 июля 2009

Попробуйте:

    // add data to stream
    ss << bValid << " ";
    ss << dValue << " ";
    ss << dTime << " ";
0 голосов
/ 20 июля 2009

Причина, по которой исходный код не работал, заключается в том, что извлечение было жадным, поэтому ssnew >> bValid сожрал «001».

Обратите внимание, что strstream устарел в пользу stringstream.

...