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 w开发者_C百科ork.
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
:
- 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).
std::getline
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.
精彩评论