c++visual-studio-2010stringstreamlexical-cast

Stringstream to vector<int>


I'm wondering what the best way to write from an std::stringstream into a vector<int>.

Here's an example of what's in the stringstream: "31 #00 532 53 803 33 534 23 37"

Here's what I've got:

int buffer = 0;
vector<int> analogueReadings;
stringstream output;

 while(output >> buffer)
     analogueReadings.push_back(buffer);

However what seems to happen is, it reads the first thing, then it gets to #00 and returns 0 because it's not a number.

Ideally, what I want is, it gets to a # and then just skips all characters until the next whitespace. Is this possible with flags or something?

Thanks.


Solution

  • #include <iostream>
    #include <sstream>
    #include <vector>
    
    int main ( int, char ** )
    {
        std::istringstream reader("31 #00 532 53 803 33 534 23 37");
        std::vector<int> numbers;
        do
        {
            // read as many numbers as possible.
            for (int number; reader >> number;) {
                numbers.push_back(number);
            }
            // consume and discard token from stream.
            if (reader.fail())
            {
                reader.clear();
                std::string token;
                reader >> token;
            }
        }
        while (!reader.eof());
    
        for (std::size_t i=0; i < numbers.size(); ++i) {
            std::cout << numbers[i] << std::endl;
        }
    }