在C++标准库中并没有实现split方法,但是在实际生产中,我们又经常碰到。
在C++11以前我们可以使用以下方法来实现:
static void split(const string& s, vector<string>& tokens, const string& delimiters = " ")
{
string::size_type lastPos = s.find_first_not_of(delimiters, 0);
string::size_type pos = s.find_first_of(delimiters, lastPos);
while (string::npos != pos || string::npos != lastPos) {
tokens.push_back(s.substr(lastPos, pos - lastPos));
lastPos = s.find_first_not_of(delimiters, pos);
pos = s.find_first_of(delimiters, lastPos);
}
}
在C++11引入regex后,可以使用以下方法:
static void split(const std::string& source, std::vector<std::string>& tokens, const string& delimiters = " ") {
std::regex re(delimiter);
std::copy(std::sregex_token_iterator(source.begin(), source.end(),re,-1),
std::sregex_token_iterator(),
std::back_inserter(tokens));
}
参考:
https://stackoverflow.com/questions/26328793/how-to-split-string-with-delimiter-using-c
https://en.cppreference.com/w/cpp/regex/regex_token_iterator