Like I have a stringstream variable contains "abc gg rrr ff"
When I use >> on that stringstream variable, it gives me "abc". How can I get the remaining string: " gg rrr ff"? It seems neither str() nor rdbuf() does this work.
You can use std::getline to get the rest of the string from the stream:
#include <iostream>
#include <sstream>
using namespace std;
int main() {
stringstream ss("abc gg rrr ff");
string s1, s2;
ss >> s1;
getline(ss, s2); //get rest of the string!
cout << s1 << endl;
cout << s2 << endl;
return 0;
}
Output:
abc
gg rrr ff
Demo : http://www.ideone.com/R4kfV
There is an overloaded std::getline function in which a third parameter takes a delimiter upto which you can read the string. See the documentation of std::getline:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
string str("123 abc");
int a;
istringstream is(str);
is >> a;
// here we extract a copy of the "remainder"
string rem(is.str().substr(is.tellg()));
cout << "Remaining: [" << rem << "]\n";
}
std::istringstream input;
int extracted;
input >> extracted;
IMO, the simplest thing you could possibly do is this:
std::stringstream tmp;
tmp << input.rdbuf();
std::string remainder = tmp.str();
This is not optimal in terms of performance. Otherwise, directly access the stringbuffer (probably using rbuf().pubseekpos and tellg on the stream... haven't tested that).
getline reads characters from an input stream and places them into a string
Alternatively, if you need the rest of the string verbatim you can use std::getline(my_stringstream, result, EOF) where result is a std::string containing the result.
Keep using operator>>, it will extract the rest of it in whitespace-delimited pieces.