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

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

本文关键字:字符串 提取 之后 变量 sstream 何获取 获取      更新时间:2023-10-16

就像我有一个stringstream变量包含"abc gg rrr ff"

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

您可以使用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:的文档

  • 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,你能做的最简单的事情就是:

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

就性能而言,这不是最佳的。否则,直接访问字符串缓冲区(可能在流上使用rbuf().pubseekpostellg…还没有测试过)。

std::getline

getline从输入流中读取字符,并将它们放入字符串中

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

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