/*
破坏性分割文本(原文本,原文本长度,分割字符[,存放文本数组])
此函数具有破坏性,分割后原文本不可释放。最后一个参数如果为空。则只统计分割数量,不分割 。
*/
int str_SplitEx(char* szbuf,int buflen,char* szsplit,char*** pszarr)
{
char * psz=szbuf;//(char*)malloc(buflen+2);
char *psz_old=psz;
int nCount =0;
int pszendlen=strlen(szsplit);
char *psend=psz+buflen-pszendlen;
bool ext=false;
nCount=::str_GetSubStrCount(szbuf,buflen,szsplit)+1;
if(pszarr==NULL)//数组指针不存在,。放弃分割、
return nCount;
char** pszdst=*pszarr;
char *strbuf=psz_old;
psz=psz_old;
pszdst=(char**)malloc(nCount*sizeof(char*)+4);
int arridx=0;
//开始分割
while(psz<psend)
{
ext=true;
for(int i=0;i<pszendlen;i++)
{
if(szsplit[i]!=psz[i])
{
ext=false;
break;
}
}
if(ext)
{
memset(psz,0,pszendlen);
//cs.ElementAt(arridx++)=strbuf;
pszdst[arridx++]=strbuf;
psz+=pszendlen;
strbuf=psz;
}
else
{
psz = _tcsinc(psz);
}
}
pszdst[arridx]=strbuf;
//free(psz_old);
return nCount;
}
/*
快速分割文本
原文本指针
长度
分割字符
数组引用
*/
int str_Split(char *szbuf,int buflen,char *szsplit,CStringArray& cs)
{
char * psz=(char*)malloc(buflen+2);
char *psz_old=psz;
memset(psz,0,buflen+2);
memcpy(psz,szbuf,buflen);
// psz[szbuf+1]='\0';
// psz[szbuf+2]='\0';
int nCount =0;
int pszendlen=strlen(szsplit);
char *psend=psz+buflen-pszendlen;
bool ext=false;
//先得到 分割数目
while(psz<psend)
{
ext=true;
for(int i=0;i<pszendlen;i++)
{
if(szsplit[i]!=psz[i])
{
ext=false;
break;
}
}
if(ext)nCount++;
psz = _tcsinc(psz);
}
char *strbuf=psz_old;
psz=psz_old;
cs.SetSize(nCount+1);
int arridx=0;
//开始分割
while(psz<psend)
{
ext=true;
for(int i=0;i<pszendlen;i++)
{
if(szsplit[i]!=psz[i])
{
ext=false;
break;
}
}
if(ext)
{
//
memset(psz,0,pszendlen);
cs.ElementAt(arridx++)=strbuf;
psz+=pszendlen;
strbuf=psz;
}
else
{
psz = _tcsinc(psz);
}
}
if(strlen(strbuf)>0)
{
cs.ElementAt(nCount)=strbuf;
nCount++;
}
else
{
cs.SetSize(nCount);
}
free(psz_old);
return nCount;
}