typedef struct st_split
{
const char *p;
unsigned int len;
}split_t;
//c函数,字符串分割为数组
//str 要分割的字符
//psdeli 分割字符串
//pparr 分割结果,只保存子字符串在str中的开始位置与长度
unsigned int split(const char *str, split_t **pparr, const char *psdeli)
{
unsigned int deli_len;
unsigned int n;
const char *s;
char *p;
deli_len=strlen(psdeli);
n=0;
s=str;
LOOP:
p=strstr(s,psdeli);
if (p)
{
n++;
s=p+deli_len;
goto LOOP;
}else if (strlen(s)){
n++;
}
if (pparr)
{
*pparr=(split_t*)malloc(sizeof(split_t)*n);
if (*pparr)
{
n=0;
s=str;
LOOP1:
p=strstr(s,psdeli);
if (p)
{
(*pparr)[n].p=s;
(*pparr)[n].len=p-s;
n++;
s=p+deli_len;
goto LOOP1;
}else if (deli_len=strlen(s)){
(*pparr)[n].p=s;
(*pparr)[n].len=deli_len;
n++;
}
return n;
}
}
return 0;
}
//使用方法
/*
unsigned int n;
unsigned int i;
char szField[256];
split_t *parr=0;
n=split(ptt->pkeys, &parr, " ");
if (parr)
{
for(i=0;i<n;i++)
{
int nLen=parr[i].len;
if (nLen>255)
{
nLen=255;
}
if (nLen)
{
strncpy(szField,parr[i].p,nLen);
//......
}
}
free(parr);
}
*/
//mfc 字符串分割函数
void Split(CString str, CStringArray& tokens, CString &delimiters)
{
tokens.RemoveAll();
int pos = 0;
int pre_pos = 0;
pos = str.Find(delimiters,pos);
if ( -1 != pos)
{
tokens.Add(str.Left(pos));
while(true)
{
pre_pos = pos+delimiters.GetLength();
pos = str.Find(delimiters,pre_pos);
if ( -1 != pos )
{
tokens.Add(str.Mid(pre_pos,(pos-pre_pos)));
}else{
tokens.Add(str.Mid(pre_pos));
break;
}
}
}else{
tokens.Add(str);
}
}
//c++字符串分割函数
void Split(const string& str, vector<string>& tokens, const string& delimiters)
{
tokens.clear();
int pos = 0;
int pre_pos = 0;
pos = str.find(delimiters,pos);
if ( -1 != pos)
{
tokens.push_back(str.substr(0,pos));
while(true)
{
pre_pos = pos+delimiters.length();
pos = str.find(delimiters,pre_pos);
if ( -1 != pos )
{
tokens.push_back(str.substr(pre_pos,pos-pre_pos));
}else{
tokens.push_back(str.substr(pre_pos));
break;
}
}
}else{
tokens.push_back(str);
}
}