6

我有一个字符串流,我需要将第一部分取出,然后将其余部分放入单独的字符串中。例如,我有字符串"This is a car",我需要以 2 个字符串结尾:a = "This"b = "is a car".

当我使用 stringstream 获取第一部分使用<<时,然后我使用.str()转换为字符串,这当然给了我整个东西“ This is a car"。我怎样才能让它按我想要的方式播放?

4

4 回答 4

4
string str = "this is a car";

std::stringstream ss;
ss << str;

string a,b;
ss >> a;
getline(ss, b);

编辑:更正感谢@Cubbi:

ss >> a >> ws;

编辑:

此解决方案在某些情况下(例如我的测试用例)可以处理换行符,但在其他情况下会失败(例如 @rubenvb 的示例),而且我还没有找到一种干净的方法来修复它。我认为@tacp 的解决方案更好、更健壮,应该被接受。

于 2013-04-18T03:11:25.263 回答
2

您可以这样做:首先获取整个字符串,然后获取第一个单词,然后使用substr获取其余部分。

 stringstream s("This is a car");
 string s1 = s.str();
 string first;
 string second;

 s >> first;
 second = s1.substr(first.length());
 cout << "first part: " << first <<"\ second part: " << second <<endl;

在 gcc 4.5.3 输出中对此进行测试:

first part: This 
second part: is a car
于 2013-04-18T03:11:46.290 回答
1

getline读出第一位后,您可以在流上进行操作....

于 2013-04-18T03:10:49.637 回答
0

另一种方法是使用 rdbuf:

stringstream s("This is a car");
string first;
stringstream second;

s >> first;
second << s.rdbuf();
cout << "first part: " << first << " second part: " << second.str() << endl;

如果您最终要将结果输出到流而不是字符串,这可能是一个不错的选择。

于 2017-01-20T21:25:50.233 回答