字符串列表的C语言实现:c
前两天需要用到字符串数组,需要动态的增强和削减,类似于java里的ArrayList Sing 提供的功能,但C里又没有现成的库和函数,所以就自己动手写了一个。可能会有伴侣需要,废话也不多说了,挺直把代码贴出来: ilude stdio.h include stdlib.h include string.h typef struct{ char **list; //用字符串数组来存放字符串列表 int size; //子字符串数量 }st_strlist; * 初始化一个字符串列表 * 注重:strlist_malloc() 和 strlist_(st_strlist*) 要配对用法 st_strlist* strlist_malloc() st_strlist *strlist = (st_strlist*)malloc(sizeof(st_strlist)); mem(strlist, 0, sizeof(st_strlist)); return strlist; * 在strlist列表的末端增强一个字符串 int strlist_a(st_strlist *strlist, char *str) int len = strlen(str); strlist- size++; strlist- list = (char**)realloc(strlist- list, sizeof(char*) * strlist- size); if(strlist- list == NULL){ /* out of memory! */ printf( error: not enough memory (realloc returned NULL)\n strlist- size--; return -1; strlist- list[strlist- size-1]=(char*)malloc(len+1); mepy(strlist- list[strlist- size-1], str, len); (strlist- list[strlist- size-1])[len]=0; return strlist- size; * 在字符串列表的ind序号后插入str字符串 int strlist_insertAfter(st_strlist *strlist, char* str, int index) int i, len; if(index = strlist- size){ return -1; len = strlen(str); strlist- size++; strlist- list = (char**)realloc(strlist- list, sizeof(char
*) * strlist- size); for(i= strlist- size-1; i index+1; i--){ strlist- list[i] = strlist- list[i-1]; strlist- list[index+1] = (char*)malloc(len+1); memy(strlist- list[index+1], str, len); strlist- list[index+1][len]=0; return 0; * 删除字符串列表strlist末端的字符串 int strlist_removeLast(st_strlist *strlist){ if(strlist- size =0){ return -1; free(strlist- list[strlist- size-1]); strlist- size--; return strlist- size; * 删除字符串列表index位置处的字符串 int strlist_removeAt(st_strlist *strlist, int index) int i; if(index = strlist- size){ return -1; free(strlist- list[index]); for(i=index; i strlist- size-1; i++){ strlist- list[i] = strlist- list[i+1]; strlist- size--; return strlist- size; * 猎取strlist中index处的字符串。 char* strlist_getStrAt(st_strlist *strlist, int index) if(strlist==NULL || index =strlist- size){ return NULL; return strlist- list[index]; * 推断字符串列表strlist内是否包含了字符串str。 int strlist_contains(st_strlist *strlist, char* str) int i; for(i=0; i strlist- size; i++){ if(0 == (str(strlist- list[i], str))){ return 1; return 0; * 释放字符串列表占用的内存空间 int strlist_free(st_strlist *strlist) int i; if(!strlist){ return -1; for(i=0; i strlist- size; i++){ free(strlist- list[i]); free(strlist- list); free(strlist); return 0; * 打印字符串列表的相关信息 vo strlist_infolog(st_strlist *strlist) int i; printf( \n \n printf( strlist info:\n printf( strlist size: %d\
n , strlist- size); for(i=0; i strlist- size; i++){ printf( %d, %s\n ,i, strlist- list[i]); int main(int argc, char *argv[]) printf( hello c_strlist! st_strlist *strlist = strlist_malloc(); strlist_infolog(strlist); strlist_add(strlist,(char*) aaaa strlist_infolog(strlist); strlist_add(strlist,(char*) bbbb strlist_infolog(strlist); strlist_add(strlist,(char*) 字符串列表测试 strlist_infolog(strlist); strlist_insertAfter(strlist, (char*) ccccc , 1); strlist_infolog(strlist); printf( \nis strlist contians \ 123\ ? %d\n , strlist_contains(strlist,(char*) 123 )); printf( \nis strlist contians \ 字符串列表测试\ ? %d\n , strlist_contains(strlist,(char*) 字符串列表测试 )); strlist_removeLast(strlist); strlist_infolog(strlist); printf( \nis strlist contians \ 字符串列表测试\ ? %d\n , strlist_contains(strlist,(char*) 字符串列表测试 )); strlist_removeAt(strlist,1); strlist_infolog(strlist);
c语言如何创建字符串数组
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论