How to check if stringstream>>string will put nothing on the string?

18,257

Solution 1

When you cannot read from stream - its state changes, so when casting to bool, it returns false:

bool read = static_cast<bool>(ss >> laststring);

Or - in if-expr:

if (ss >> laststring) 
    cout << "Just read: " << laststring;

See example

Solution 2

You can only know after trying to read whether there was something or not. What you might be able to do is to skip whitespace and see if there is a non-space in the next location:

if ((in >> std::ws).peek() != std::char_traits<char>::eof()) {
    ...
}

Given that empty strings are cheap to create, I wouldn't bother and try read the string. Note, however, that reading from streams isn't line based, i.e., in your case above you need to split the lines first or use something like std::getline() to read the second part of line.

Share:
18,257
Icebone1000
Author by

Icebone1000

conceptArt.org sketchbook deviantArt gallery

Updated on June 09, 2022

Comments

  • Icebone1000
    Icebone1000 almost 2 years

    For example, when parsing a text file, some times this file have stuff like this:

    keyword a string here
    keyword another string
    keyword 
    keyword again a string
    

    Note that the 3th line have an empty string (nothing or white spaces).. The thing is that when you do stringstream>>laststring, and stringstream have an empty string (null or just white space), it will not overwrite the "laststring", it will do nothing. Theres anyway to check this situation before hand? I dont want to create a temp empty string just to check it is still empty after stringstream>>, seems lame.