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.
加载中,请稍侯......
精彩评论