Eva*_*ran 14
这对我很好:),它把结果放入elems.delim可以是任何char.
std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
std::stringstream ss(s);
std::string item;
while(std::getline(ss, item, delim)) {
elems.push_back(item);
}
return elems;
}
Run Code Online (Sandbox Code Playgroud)
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <ostream>
#include <algorithm>
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost;
int main() {
vector<string> v;
split(v, "1=2&3=4&5=6", is_any_of("=&"));
copy(v.begin(), v.end(), ostream_iterator<string>(cout, "\n"));
}
Run Code Online (Sandbox Code Playgroud)
这取决于令牌分隔符的复杂程度以及是否有多个。对于简单的问题,只需使用 std::istringstream 和 std::getline 即可。对于更复杂的任务或者如果您想以符合 STL 的方式迭代标记,请使用 Boost 的 Tokenizer。另一种可能性(尽管比这两种都更混乱)是设置一个 while 循环,调用 std::string::find 并将最后找到的标记的位置更新为搜索下一个标记的起点。但这可能是 3 个选项中最容易出现错误的一个。