Как и я, переменная stringstream
содержит "abc gg rrr ff"
Когда я использую → эту переменную stringstream
, она дает мне "abc"
. Как я могу получить оставшуюся строку: " gg rrr ff"
? Кажется, что ни str()
, ни rdbuf()
не работают.
Как и я, переменная 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
:
#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();
Это не оптимально с точки зрения производительности. В противном случае, напрямую обращайтесь к stringbuffer (возможно, используя rbuf().pubseekpos
и tellg
в потоке... не тестировали это).
std::getline
Этот текст добавлен, чтобы соответствовать следующему SILLYRULE: "тело должно быть не менее 30 символов, вы ввели 14"
В качестве альтернативы, если вам нужна остальная часть строки дословно, вы можете использовать std::getline(my_stringstream, result, EOF)
, где result
- это std::string
, содержащий результат.
Продолжайте использовать operator>>
, он будет извлекать оставшуюся часть в фрагментах с пробелами.