就像我的stringstream
变量包含"abc gg rrr ff"
当我在>>
变量上使用stringstream
时,它会给我"abc"
。如何获取剩余的字符串:" gg rrr ff"
?似乎str()
和rdbuf()
都不起作用。
答案 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().pubseekpos
和tellg
...尚未测试过。)
答案 3 :(得分:4)
std::getline
添加此文本以符合以下SILLYRULE:“正文必须至少30个字符;您输入14”
答案 4 :(得分:2)
或者,如果您逐字地需要字符串的其余部分,则可以使用std::getline(my_stringstream, result, EOF)
result
是包含结果的std::string
。
答案 5 :(得分:1)
继续使用operator>>
,它将以空格分隔的部分提取剩余部分。