C语言实现Split函数
发布时间:2020-12-17 07:44:00 所属栏目:百科 来源:网络整理
导读:借助C语言的动态内存分配,实现类似VB中Split函数的效果。 结构体介绍: IString: 参数 str:字符串数组的指针 参数 num:字符串个数 函数介绍: 功能:按一个字符来拆分字符串 参数 src:要拆分的字符串 参数 delim:按照这个字符来拆分字符串 参数 istr:借助这
借助C语言的动态内存分配,实现类似VB中Split函数的效果。结构体介绍:IString: 参数 str:字符串数组的指针 参数 num:字符串个数 函数介绍:功能:按一个字符来拆分字符串 #include <stdio.h> #include <stdlib.h> #include <string.h> 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<istr.num;i++) printf("%sn",istr.str[i]); //when you don't ues it,you must to free memory. for (i=0;i<istr.num;i++) free(istr.str[i]); free(istr.str); } else printf("memory allocation failure!n"); system("pause"); return 0; }
data0 注意: IString使用完之后要记住释放内存 for (i=0;i<istr.num;i++) free(istr.str[i]); free(istr.str); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |