在从sstream变量中提取字符串后,如何获取剩余的字符串?

时间:2011-06-08 23:13:25

标签: c++

就像我的stringstream变量包含"abc gg rrr ff"

一样

当我在>>变量上使用stringstream时,它会给我"abc"。如何获取剩余的字符串:" gg rrr ff"?似乎str()rdbuf()都不起作用。

6 个答案:

答案 0 :(得分:34)

您可以使用std::getline从流中获取其余字符串:

#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;
}

输出:

abc
gg rrr ff

演示:http://www.ideone.com/R4kfV

有一个重载的std::getline函数,其中第三个参数采用分隔符,您可以读取该字符串。请参阅std::getline的文档:

答案 1 :(得分:16)

#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";
}

答案 2 :(得分:9)

std::istringstream input;
int extracted;
input >> extracted;

IMO,你可能做的最简单的事情就是:

std::stringstream tmp;
tmp << input.rdbuf();
std::string remainder = tmp.str();

这在性能方面不是最佳的。否则,直接访问stringbuffer(可能在流上使用rbuf().pubseekpostellg ...尚未测试过。)

答案 3 :(得分:4)

std::getline

  


  添加此文本以符合以下SILLYRULE:“正文必须至少30个字符;您输入14”   

答案 4 :(得分:2)

或者,如果您逐字地需要字符串的其余部分,则可以使用std::getline(my_stringstream, result, EOF) result是包含结果的std::string

答案 5 :(得分:1)

继续使用operator>>,它将以空格分隔的部分提取剩余部分。