//获取指定字符在字符串中出现次数
int GetCharOccurrence(char *strSource,char cDivider)
{
if(strSource==NULL) return 0;
int nCount=0;
char *pStart=strSource;
char* pDividerPos = strchr( pStart, cDivider);
while(pDividerPos)
{
nCount++;
pStart=pDividerPos+1;
pDividerPos = strchr( pStart, cDivider);
}
return nCount;
}
char **StringDivision(char *strSource,char cDivider,int *nCount)
{
if(strSource==NULL || strlen(strSource)==0) return NULL;
*nCount=GetCharOccurrence(strSource,cDivider)+1;
char **pSubStrings=(char**)malloc((*nCount)*sizeof(char*));
memset(pSubStrings,0,(*nCount)*sizeof(char*));
int nIndex=0;
char *pStart=strSource;
char* pDividerPos = strchr( pStart,cDivider);
while(pDividerPos)
{
pSubStrings[nIndex]=(char*)malloc((pDividerPos-pStart+1)*sizeof(char));
memset(pSubStrings[nIndex],0,(pDividerPos-pStart+1)*sizeof(char));
strncpy(pSubStrings[nIndex],pStart,pDividerPos-pStart);
pStart=pDividerPos+1;
pDividerPos = strchr( pStart,cDivider);
nIndex++;
}
pSubStrings[nIndex]=(char*)malloc((strlen(pStart)+1)*sizeof(char));
memset(pSubStrings[nIndex],0,(strlen(pStart)+1)*sizeof(char));
strcpy(pSubStrings[nIndex],pStart);
return pSubStrings;
}
//释放内存
void FreeSubString(char** pSubStrings,int nCount)
{
if(pSubStrings==NULL) return;
for (int i=0;i<nCount;i++)
{
if(pSubStrings[i])
free(pSubStrings[i]);
}
free(pSubStrings);
}
//用法
char strSample[]="aa,bb,cc,dd";
int nCount=0;
char **pSubString=StringDivision(strSample,',',&nCount);
FreeSubString(pSubString,nCount);