测试环境:
操作系统: Windows10 64位
运行环境: Visual Studio 10
函数:
/***************************************************************
/* 函 数 名:Tokenize
/* 函数功能:C语言版Tokenize(),类似MFC/VC++中的CString类的方法
/* Tokenize(),搜索分隔符,返回分隔符前的字符串,每一次
* 搜索结束后uPos保存分隔符的下一个位置
/* 参 数:
/* str:源字符串
/* c:分隔符或者其他指定字符
/* uPos:搜索分隔符的起始位置,第一次从零开始
/* 返 回 值:
/* 返回分隔符前的字符串
/*
/*依赖的头文件:
/*#include
/*#include
/*
/* 作 者:X攻城狮
/* 日 期:2015年11月5日
/***************************************************************/
char* Tokenize(const char *str, const char c, unsigned int * const uPos)
{
unsigned int uLen = strlen(str);
if(*uPos >= uLen)
{
return "";
}
char *strRet = (char *)malloc(uLen + 1 - *uPos);
memset(strRet, 0, uLen+1);
unsigned int i = *uPos;
for(i=*uPos; i
{
if(str[i] != c)
{
strRet[i-*uPos] = str[i];
}
else
{
break;
}
}
strRet[i-*uPos] = '\0';
*uPos = i+1;
return strRet;
}
测试代码:
#include
#include
#include
/***************************************************************
/* 函 数 名:Tokenize
/* 函数功能:C语言版Tokenize(),类似MFC/VC++中的CString类的方法
/* Tokenize(),搜索分隔符,返回分隔符前的字符串,每一次
/* 搜索结束后uPos保存分隔符的下一个位置
/* 参 数:
/* str:源字符串
/* c:分隔符或者其他指定字符
/* uPos:搜索分隔符的起始位置,第一次从零开始
/* 返 回 值:
/* 返回分隔符前的字符串
/*
/*依赖的头文件:
/*#include
/*#include /*
/*
/* 作 者:X攻城狮
/* 日 期:2015年11月5日
/***************************************************************/
char* Tokenize(const char *str, const char c, unsigned int * const uPos)
{
unsigned int uLen = strlen(str);
if(*uPos >= uLen)
{
return "";
}
char *strRet = (char *)malloc(uLen + 1 - *uPos);
memset(strRet, 0, uLen+1);
unsigned int i = *uPos;
for(i=*uPos; i
{
if(str[i] != c)
{
strRet[i-*uPos] = str[i];
}
else
{
break;
}
}
strRet[i-*uPos] = '\0';
*uPos = i+1;
return strRet;
}
int main()
{
char strTest[1024] = "wer,qsd,54543,5345,dad,523fs,532rwt4,";
char strResult[1024] = "NULL";
unsigned int uPos = 0;
while(strcmp(strResult,""))
{
strcpy(strResult, Tokenize(strTest, ',', &uPos));
if(strcmp(strResult,""))
{
printf("返回结果:%s\n",strResult);
}
}
return 0;
}
测试结果:
注:C语言中本身就有一个分割字符串的函数
原型
char *strtok(char s[], const char *delim);
功能
分解字符串为一组字符串。s为要分解的字符串,delim为 分隔符字符串。
例如:strtok("abc,def,ghi",","),最后可以分割成为abc def ghi.尤其在点分十进制的IP中提取应用较多。
说明
strtok()用来将字符串分割成一个个片段。参数s指向欲分割的 字符串,参数delim则为分割字符串中包含的所有字符。当strtok()在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的 指针。
返回值
从s开头开始的一个个被分割的串。当查找不到delim中的字符时,返回NULL。
所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点。