Search code examples
c++stlstreamformatted-input

Reading formatted data with C++'s stream operator >> when data has spaces


I have data in the following format:

4:How do you do?
10:Happy birthday
1:Purple monkey dishwasher
200:The Ancestral Territorial Imperatives of the Trumpeter Swan

The number can be anywhere from 1 to 999, and the string is at most 255 characters long. I'm new to C++ and it seems a few sources recommend extracting formatted data with a stream's >> operator, but when I want to extract a string it stops at the first whitespace character. Is there a way to configure a stream to stop parsing a string only at a newline or end-of-file? I saw that there was a getline method to extract an entire line, but then I still have to split it up manually [with find_first_of], don't I?

Is there an easy way to parse data in this format using only STL?


Solution

  • You can read the number before you use std::getline, which reads from a stream and stores into a std::string object. Something like this:

    int num;
    string str;
    
    while(cin>>num){
        getline(cin,str);
    
    }