//根据多个分隔符来分割字符串
source 源串
seprator分隔符
count分割后的子串数量
返回值:分割后的子串
CString* ExtractStr(LPCTSTR source, LPCTSTR seprator, int *count)
{
int iSubStringCount,nIndex=0;
CString strSource=source,strSeperator=seprator,*pstrSubStrings;
if(strSeperator.GetLength()==0)
{
*count=0;
return NULL;
}
//seprator中的所有分隔符全部替换成第一个,并统计source中seprator的个数
iSubStringCount =1;
for(int i=0;i<strSource.GetLength();i++)
{
if(strSource[i]==strSeperator[0])
iSubStringCount++;
}
for(int i=1;i<strSeperator.GetLength();i++)
{
iSubStringCount+=strSource.Replace(strSeperator[i],strSeperator[0]);
}
pstrSubStrings=new CString[iSubStringCount];
int nNewIndex,nCount=0;
while(nIndex<strSource.GetLength())
{
nNewIndex=strSource.Find(strSeperator[0],nIndex);
if(nNewIndex>=0)
pstrSubStrings[nCount++]=strSource.Mid(nIndex,nNewIndex-nIndex);
else
pstrSubStrings[nCount++]=strSource.Mid(nIndex);
nIndex+=pstrSubStrings[nCount-1].GetLength()+1;
}
*count=iSubStringCount;
return pstrSubStrings;
}
//释放内存
void FreeStrings(CString *lpstr, int count)
{
if(lpstr==NULL || count<=0)
{
return;
}
delete[] lpstr;
}
例子:
CString strSample=TEXT("aa,bb,cc,dd");
int nCount=0;
CString pSubStrings=ExtractStr(strSample,TEXT(","),&nCount);
....
FreeStrings(pSubStrings,nCount);//用完子串后释放内存