借助C语言的动态内存分配,实现类似VB中Split函数的效果。
结构体介绍:
IString:
参数 str:字符串数组的指针
参数 num:字符串个数
函数介绍:
功能:按一个字符来拆分字符串
参数 src:要拆分的字符串
参数 delim:按照这个字符来拆分字符串
参数 istr:借助这个结构体来返回给调用者拆分后的字符串数组和字符串的个数
返回拆分是否成功
#include
#include
#include
typedef struct {
char **str; //the PChar of string array
size_t num; //the number of string
}IString;
/** \Split string by a char
*
* \param src:the string that you want to split
* \param delim:split string by this char
* \param istr:a srtuct to save string-array's PChar and string's amount.
* \return whether or not to split string successfully
*
*/
int Split(char *src,char *delim,IString* istr)//split buf
{
int i;
char *str = NULL,*p = NULL;
(*istr).num = 1;
str = (char*)calloc(strlen(src)+1,sizeof(char));
if (str == NULL) return 0;
(*istr).str = (char**)calloc(1,sizeof(char *));
if ((*istr).str == NULL) return 0;
strcpy(str,src);
p = strtok(str,delim);
(*istr).str[0] = (char*)calloc(strlen(p)+1,sizeof(char));
if ((*istr).str[0] == NULL) return 0;
strcpy((*istr).str[0],p);
for(i=1; p = strtok(NULL,delim); i++)
{
(*istr).num++;
(*istr).str = (char**)realloc((*istr).str,(i+1)*sizeof(char *));
if ((*istr).str == NULL) return 0;
(*istr).str[i] = (char*)calloc(strlen(p)+1,sizeof(char));
if ((*istr).str[0] == NULL) return 0;
strcpy((*istr).str[i],p);
}
free(str);
str = p = NULL;
return 1;
}
int main()
{
int i;
char s[]="data0|data1|data2|data3|data4|data5|data6|data7|data8";
IString istr;
if ( Split(s,"|",&istr) )
{
for (i=0;i
printf("%s\n",istr.str[i]);
//when you don't ues it,you must to free memory.
for (i=0;i
free(istr.str[i]);
free(istr.str);
}
else
printf("memory allocation failure!\n");
system("pause");
return 0;
}
运行结果:
data0
data1
data2
data3
data4
data5
data6
data7
data8
注意:
IString使用完之后要记住释放内存
for (i=0;i
free(istr.str[i]);
free(istr.str);
总结
以上是编程之家为你收集整理的C语言实现Split函数全部内容,希望文章能够帮你解决C语言实现Split函数所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
小编个人微信号 jb51ccc
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!