开发者

How do you get the remaining string after a string extracted from a sstream variable?

开发者 https://www.devze.com 2023-03-11 19:35 出处:网络
Like I have a stringstream variable contains \"abc ggrrrff\" When I use >> on that stringstream variable, it gives me \"abc\". How can I get the remaining string: \" ggrrrff\"? It seems neither

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消