我有一个字符串流,我需要将第一部分输出,然后将剩余部分放入一个单独的字符串中。例如,我有字符串"This is a car"
,我需要最终得到2个字符串:a = "This"
和b = "is a car"
。
当我使用stringstream使用<<
获取第一部分时,我使用.str()
转换为字符串,这当然给了我整个事情“This is a car"
。怎么能我按照我想要的方式来玩它?
答案 0 :(得分: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的解决方案更好,更强大,应该被接受。
答案 1 :(得分: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
答案 2 :(得分:1)
在读完第一位后,你可以在流上做getline
....
答案 3 :(得分: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;
如果您最终要将结果输出到流而不是字符串,这可能是一个不错的选择。