void split(std::string& s, std::string& delim,std::vector< std::string >* ret)
{
size_t last = 0; //size_t 类型
size_t index=s.find_first_of(delim,last); //找第一个匹配的分隔符
while (index!=std::string::npos) //string::npos是find找不到时返回的值
{
ret->push_back(s.substr(last,index-last));
last=index+1;
index=s.find_first_of(delim,last);
}
if (index-last>0)
{
ret->push_back(s.substr(last,index-last));
}
}
vector<string> split(string& str,const char c)
{
char *cstr, *p;
vector<string> res;
cstr = new char[str.size()+1];
strcpy(cstr,str.c_str());//string.c_str 转换成c串
p = strtok(cstr,&c);
while(p!=NULL)
{
res.push_back(p);//用c串可以直接给string赋值,调用的是string的拷贝构造函数
p = strtok(NULL,&c);
}
return res;
}
int split(const string& str, vector<string>& ret_, string sep = ":")
{
if (str.empty())
{
return 0;
}
string tmp;
string::size_type pos_begin = str.find_first_not_of(sep);//找第一个不匹配的
string::size_type comma_pos = 0;
while (pos_begin != string::npos)
{
comma_pos = str.find(sep, pos_begin);
if (comma_pos != string::npos)
{
tmp = str.substr(pos_begin, comma_pos - pos_begin);
pos_begin = comma_pos + sep.length();
}
else
{
tmp = str.substr(pos_begin);
pos_begin = comma_pos;
}
if (!tmp.empty())
{
ret_.push_back(tmp);
tmp.clear();
}
}
return 0;
}