c++中string的仿java string的split接口
直接简单看接口函数,有需要的可以根据自身需要做适当的变化变为自己函数接口
方式一:使用std的find_first_of实现
#include <string>
#include <list>
void stringSplit(const std::string& strData, const std::string& strDelim, std::list<std::string>& lstSplitString)
{
size_t iLast = 0;
size_t iIndex = 0;
iIndex = strData.find_first_of(strDelim, iLast);
while(iIndex != std::string::npos)
{
std::string strTemp = strData.substr(iLast, iIndex - iLast); //拿到的值
if (!strTemp.empty())
{
lstSplitString.push_back(strTemp);
}
iLast = iIndex + strDelim.length(); //记录偏移位置
iIndex = strData.find_first_of(strDelim, iLast);
}
//处理最后一个
iIndex = strData.length();
if (iIndex > iLast)
{
std::string strTemp = strData.substr(iLast, iIndex - iLast); //拿到的值
if (!strTemp.empty())
{
lstSplitString.push_back(strTemp);
}
}
return;
}
方式二:使用istringstream和getline实现
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
void stringSplit(const std::string& strData, char chDelim, std::vector<std::string>& vtSplitRet)
{
std::istringstream ss(strData);
std::string strItem = "";
// 注:按字符进行分割
while (std::getline(ss, strItem, chDelim))
{
if (!(strItem.empty()))
{
vtSplitRet.emplace_back(strItem);
}
}
return;
}
方式三:使用正则表达式
#include <iostream>
#include <string>
#include <vector>
#include <regex>
void stringSplit(const std::string& strData, const std::string& strDelim, std::vector<std::string>& vtSplitRet)
{
std::regex strRegex(strDelim);
std::vector<std::string> vtTemp(std::sregex_token_iterator(strData.begin(), strData.end(), strRegex, -1), std::sregex_token_iterator());
vtSplitRet = vtTemp;
return;
}