These threads do NOT answer me:
resetting a stringstream
How do you clear a stringstream variable?
std::ifstream file( szFIleName_p ); if( !file ) return false; // create a string stream for parsing std::stringstream szBuffer; std::string szLine; // current line std::string szKeyWord; // first word on the line identifying what data it contains while( !file.eof()){ // read line by line std::getline(file, szLine); // ignore empty lines if(szLine == "") continue; szBuffer.str(""); szBuffer.str(szLine); szBuffer>>szKeyWord; szKeyword will always contain the first word, szBuffer is not being reset. I can't find a clear example anywhere on how to use stringstream.
New code after answer:
... szBuffer.str(szLine); szBuffer.clear(); szBuffer>>szKeyWord; ... Ok, thats my final version:
std::string szLine; // current line std::string szKeyWord; // first word on the line identifying what data it contains // read line by line while( std::getline(file, szLine) ){ // ignore empty lines if(szLine == "") continue; // create a string stream for parsing std::istringstream szBuffer(szLine); szBuffer>>szKeyWord;
For clearing the contents of a stringstream , using: m. str("");
You can't return a stream from a function by value, because that implies you'd have to copy the stream.
strstream has been deprecated since C++98, std::stringstream and boost::iostreams::array are the recommended replacements.
The StringStream class in C++ is derived from the iostream class. Similar to other stream-based classes, StringStream in C++ allows performing insertion, extraction, and other operations. It is commonly used in parsing inputs and converting strings to numbers, and vice-versa.
You didn't clear() the stream after calling str(""). Take another look at this answer, it also explains why you should reset using str(std::string()). And in your case, you could also reset the contents using only str(szLine).
If you don't call clear(), the flags of the stream (like eof) wont be reset, resulting in surprising behaviour ;)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With