方法1:
使用strtok
函数
char * __cdecl strtok(char * _Str, char * _Delim)
首次调用时,_str指向要分解的字符串,之后再次调用要把_str设成NULL。strtok
是非线程安全函数。
vector<std::string> split(const string &str, const string &pattern)
{
//const char* convert to char*
char * strc = new char[strlen(str.c_str()) + 1];
strcpy(strc, str.c_str());
vector<string> resultVec;
//首次调用时,_str指向要分解的字符串,之后再次调用要把_str设成NULL。
char* tmpStr = strtok(strc, pattern.c_str());
while (tmpStr != NULL)
{
string strRes = string(tmpStr);
if (!strRes.empty()) resultVec.push_back(strRes);
tmpStr = strtok(NULL, pattern.c_str());
}
delete[] strc;
return resultVec;
}
方法2:
使用stl函数
vector<std::string> splitWithStl(const string &str, const string &pattern)
{
std::vector<std::string> resVec;
if ("" == str)
{
return resVec;
}
//方便截取最后一段数据
string strs = str + pattern;
size_t pos = strs.find(pattern);
size_t size = strs.size();
while (pos != std::string::npos)
{
string x = strs.substr(0, pos);
resVec.push_back(x);
strs = strs.substr(pos + 1, size);
pos = strs.find(pattern);
}
return resVec;
}