最近在研究C++,遇到一个问题需要将类似如下的字符串分割开:
17;"_testCube##e17##13##Small";17;2;0;0;1;0;;;;
- 第一种方法:采用C++自带的方法
strtok()
进行分割,代码如下:
//参数我不喜欢用指针和引用这样会改变原内存空间
vector<std::string> split(string res,const char reg)
{
vector<string> v_value;
char* pstr = strtok(const_cast<char*>(res.c_str()),®);
while(pstr)
{
v_value.push_back(pstr);
pstr = strtok(NULL,®);
}
return v_value;
}
这样的方法有个缺陷,就是我们看到字符串后面有多个分号,按照需求应该分割11参数,可是strtok()
分割两个分号返回的是空指针,所以需要我们对此进行改进,留在我后续完善吧,下面介绍第二种方法。
- 第二种方法:
使用了size_type find( CharT ch, size_type pos = 0 );
方法
vector<string> split(string res,const char reg)
{
vector<string> v;
signed int start;
signed int end = res.find(reg,0);
v.push_back(res.substr(0,end));
start = end+1;
while ((end = res.find(reg,start))>0)
{
v.push_back(res.substr(start,end-start));
start = end+1;
}
return v;
}