Подтвердить что ты не робот

Как получить оставшуюся строку после строки, извлеченной из переменной sstream?

Как и я, переменная stringstream содержит "abc gg rrr ff"

Когда я использую → эту переменную stringstream, она дает мне "abc". Как я могу получить оставшуюся строку: " gg rrr ff"? Кажется, что ни str(), ни rdbuf() не работают.

4b9b3361

Ответ 1

Вы можете использовать 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:

Ответ 2

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

Ответ 3

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

IMO, простейшая вещь, которую вы могли бы сделать, это следующее:

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

Это не оптимально с точки зрения производительности. В противном случае, напрямую обращайтесь к stringbuffer (возможно, используя rbuf().pubseekpos и tellg в потоке... не тестировали это).

Ответ 4

std::getline

 
Этот текст добавлен, чтобы соответствовать следующему SILLYRULE: "тело должно быть не менее 30 символов, вы ввели 14"
 

Ответ 5

В качестве альтернативы, если вам нужна остальная часть строки дословно, вы можете использовать std::getline(my_stringstream, result, EOF), где result - это std::string, содержащий результат.

Ответ 6

Продолжайте использовать operator>>, он будет извлекать оставшуюся часть в фрагментах с пробелами.