用strstr()写的一Split分割函数(解决strtok分割问题)
来源:互联网 发布:护眼软件 知乎 编辑:程序博客网 时间:2024/05/20 01:11
用strstr()写的一Split分割函数(解决strtok分割问题)
strtok 会将 "a,b,,c,,,,d,e" 中的",,"做一个","给处理
/*
功能:返回第nPos个 (从0开始) needle分割串
参数说明:
haystack :待处理的串
needle :分割串
nPos:返回第几个处理结果
szParResult:接收结果的Buff
*/
void split(char* haystack,char* needle,int nPos,char* szParResult)
{
int NSZIE = 200;
char arr[512];
char *val = (char*)malloc(NSZIE);
memset(arr,0,sizeof(arr));
memset(val,0,sizeof(char)*NSZIE);
memcpy(arr,haystack,strlen(haystack));
int nCnt = -1;
char* buf = strstr(haystack, needle);
while(buf != NULL )
{
nCnt++;
memcpy(val,arr,strlen(haystack)-strlen(buf));
if(nPos == nCnt)
{
memcpy(szParResult,val,strlen(val));
free(val);
return ;
}
//printf("%s/n",val);
haystack = buf + strlen(needle);
buf = strstr(haystack, needle);
memset(arr,0,sizeof(arr));
memcpy(arr,haystack,strlen(haystack));
memset(val,0,sizeof(char)*NSZIE);
}
memset(val,0,sizeof(char)*NSZIE);
memcpy(val,haystack,strlen(haystack));
memcpy(szParResult,val,strlen(val));
free(val);
return;
}
/*
功能:统计needle分割后串的个数
参数说明:
haystack :待处理的串
needle :分割串
*/
int countToken(char* haystack,char* needle)
{
char* buf = haystack;
int cnt = 0;
while(buf!=NULL)
{
char* tmp = NULL;
tmp = strstr(buf,needle);
buf = tmp;
if(buf!=NULL)
buf += strlen(needle);
cnt++;
}
if(cnt==0)
{
cnt = 1;
}
return cnt;
}
void main()
{
char* haystack = "AA%%BB%C%D%%%%%E%F";
char* needle ="%%";
char result[200];
memset(result,0,sizeof(result));
for(int i=0;i<countToken(haystack ,needle );i++)
{
printf("==%d, %s/n", i,split(haystack,needle,i,result);
memset(result,0,sizeof(result));
}
}
//上面的效率太低了,下面这个是返回一个二维数组
bool StrSplit(char* haystack, char* needle, char *szArr, int colSize, int& count)
{
if ((haystack == NULL) || (needle == NULL) || (szArr == NULL))
{
return false;
}
int nCnt = 1;
char* buf = haystack;
char* tempBuf = NULL;
char *szArrRes = szArr;
tempBuf = strstr(buf,needle);
if(tempBuf == NULL)
{
memcpy(szArrRes,buf,strlen(buf));
}
else
{
memcpy(szArrRes,buf,strlen(buf)-strlen(tempBuf));
}
while(tempBuf != NULL)
{
nCnt++;
szArrRes = szArrRes+colSize;
char* temp = NULL;
tempBuf = tempBuf + strlen(needle);
temp = strstr(tempBuf,needle);
if(temp != NULL)
{
memcpy(szArrRes,tempBuf,strlen(tempBuf)-strlen(temp));
}
else
{
memcpy(szArrRes,tempBuf,strlen(tempBuf));
}
tempBuf = temp;
}
count = nCnt;
return true;
}
int main(int argc, char* argv[])
{
char *haystack="%%12%%22%%23%%33%%44%%55%%0%%0%%1%%";
char *needle="%%";
char a[100][100];
memset(a,0,sizeof(a));
int cnt = 0;
bool b = StrSplit(haystack,needle, (char*)a,100,cnt);
for(int i=0; i<cnt; i++)
{
printf("i:%d %s/n",i, a[i]);
}
return 0;
}
- 用strstr()写的一Split分割函数(解决strtok分割问题)
- c语言的split字符串分割函数strtok的使用
- 字符串的分割操作(strtok,split)
- strtok函数,分割字符串
- strtok 字符串分割函数
- 字符串分割函数 strtok
- 分割字符串:strtok()函数
- strtok函数分割字符串
- 分割字符串:strtok()函数
- strtok函数分割字符串
- strtok字符串分割函数
- strtok:字符串分割函数
- 字符串分割函数strtok()
- strtok()分割字符串函数
- strtok()函数:字符串分割
- strtok函数字符串分割
- strtok()字符串分割函数
- MFC下写的一个字符串分割的Split函数
- 反隔行原理简介
- CSS hack是什么?
- mysql 事务处理
- 关于AF_INET,gcc 和 mingw问题
- C++对象对内存的使用
- 用strstr()写的一Split分割函数(解决strtok分割问题)
- 转为aspx后,CSS样式变样原因
- Installing Git on a server
- 创意无限[转贴]
- Struts 2 数据标签教程
- 将excel数据 导入到orace
- 好疲惫
- VS2005 c# 遇到“Lc.exe 已退出,代码 -1”问题
- asp.net文本框验证输入