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.