/**
* @brief 分割字符串,使用方法如下:
* std::vector<std::string> vecFiled;
* Split("1,2,3,4", ",", vecFiled);
* @param[in] str 欲分割的字符串
* @param[in] div 分隔符
* @param[out] vecFiled 存储子串
* @return 失败返回-1,否则返回子串个数
* @author xktesla@2021-12-9
*/
int StrUtil::Split(const char* str, const char* div, std::vector<std::string>& vecField)
{
if (!div || !div[0]) { return -1; }
int divlen = strlen(div);
int len = strlen(str) + 1;
char* pCache = (char*)calloc(1, len);
memcpy(pCache, str, len);
char* p0 = (char*)pCache;
for (char* p1 = strstr(p0, div); p1; p1 = strstr(p0, div))
{
*p1 = 0;
vecField.emplace_back(p0);
p0 = p1 + divlen;
}
vecField.emplace_back(p0);
free(pCache);
return vecField.size();
}
// 高效重载
int StrUtil::Split(char* str, const char* div, std::vector<std::string>& vecField)
{
if (!div || !div[0]) { return -1; }
int divlen = strlen(div);
char* p0 = (char*)str;
for (char* p1 = strstr(p0, div); p1; p1 = strstr(p0, div))
{
char c = *p1;
*p1 = 0;
vecField.emplace_back(p0);
*p1 = c;
p0 = p1 + divlen;
}
vecField.emplace_back(p0);
return vecField.size();
}
C++实现Split
最新推荐文章于 2023-01-18 09:08:26 发布