分割字符串(C版本)

//获取指定字符在字符串中出现次数

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);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值