我有一个字符串流,我需要将第一部分取出,然后将其余部分放入单独的字符串中。例如,我有字符串"This is a car"
,我需要以 2 个字符串结尾:a = "This"
和b = "is a car"
.
当我使用 stringstream 获取第一部分使用<<
时,然后我使用.str()
转换为字符串,这当然给了我整个东西“ This is a car"
。我怎样才能让它按我想要的方式播放?
我有一个字符串流,我需要将第一部分取出,然后将其余部分放入单独的字符串中。例如,我有字符串"This is a car"
,我需要以 2 个字符串结尾:a = "This"
和b = "is a car"
.
当我使用 stringstream 获取第一部分使用<<
时,然后我使用.str()
转换为字符串,这当然给了我整个东西“ This is a car"
。我怎样才能让它按我想要的方式播放?
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 的解决方案更好、更健壮,应该被接受。
您可以这样做:首先获取整个字符串,然后获取第一个单词,然后使用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
getline
读出第一位后,您可以在流上进行操作....
另一种方法是使用 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;
如果您最终要将结果输出到流而不是字符串,这可能是一个不错的选择。