[C语言][编程]将字符串分割到字符串数组中

来源:互联网 发布:ps合成图片软件 编辑:程序博客网 时间:2024/04/20 02:50

      学习Redis的sds.c文件中,有一个关于将字符串分割到字符串数组中的代码,我学习并实现了一下,但没有考虑内存问题和其它的一些误操作的问题,换言之,只实现了最基本的功能。

//该程序实现的是将字符串分割成子字符串/*例如输入"123/456/7/89/1","/"作为分隔符,程序会返回:123 456 7 89 1*/#include<stdio.h>#include<string.h>void splitlen(char* str,int str_len,char* del,int del_len){    int cmp_len=str_len-del_len+1;    char result[10][10];    int index=0,start=0;    int j=0;    if(memcmp(str,del,del_len)==0)//去掉前面的分隔符,例如输入路径时:/home/zhangbo/C++/code,把最前面的"/"去掉    {        j=del_len;        start=del_len;    }    for(;j<cmp_len;j++){        if(memcmp(str+j,del,del_len)==0){            int copy_len=j-start;            strncpy(result[index],str+start,copy_len);            result[index][copy_len+1]='\0';            index++;            start=j+del_len;        }}    strncpy(result[index],str+start,str_len-start);    result[index][str_len-start+1]='\0';    index++;    for(int i=0;i<index+1;i++)    {        printf(result[i]);        printf("\n");    }}int main(){    char* str="/123/45/678/90";    int str_len=14;    char* del="/";    int del_len=1;    splitlen(str,str_len,del,del_len);    //char result[100][100];    //strncpy(result[0],str,3);    //printf(result[0]);    return 0;}

      在实现过程中,我遇到了一些问题,总结在下面:

1.一个数组存放的是字符串,如何将这个数组输出?

#include<stdio.h>int main(){    char* str[]={"abc","def","opq"};    int len=3;    for(int i=0;i<len;i++){        printf(str[i]);    }    return 0;}#include<stdio.h>int main(){    char* str[3];//字符串个数不可省略    str[0]="abcd";    str[1]="efgh";    str[2]="ijkl";    int len=3;    for(int i=0;i<len;i++){        printf(str[i]);    }    return 0;}
2.char **arr和char* arr[]的区别

      char* arr[]可以在声明的时候确定数组的大小,但是char** arr却不可


      之后我上网找了下相关资料,发现利用string.h中的strtok函数会更加方便。现将实现贴在下面,方便以后查找。

     

#include <stdio.h>#include <string.h>int main(void){        char str[] = "/home/zhangbo/C++/code/test";/*待分隔的原字符串*/        char seg[] = "/"; /*分隔符这里为逗号comma,分隔符可以为你指定的,如分号,空格等*/        char charlist[50][50]={""};/*指定分隔后子字符串存储的位置,这里定义二维字符串数组*/        int i =0;        char *substr= strtok(str, seg);/*利用现成的分割函数,substr为分割出来的子字符串*/        while (substr != NULL) {                strcpy(charlist[i],substr);/*把新分割出来的子字符串substr拷贝到要存储的charlsit中*/                i++;                printf("%s\n", substr);                substr = strtok(NULL,seg);/*在第一次调用时,strtok()必需给予参数str字符串,                往后的调用则将参数str设置成NULL。每次调用成功则返回被分割出片段的指针。*/        }        getchar();/*press enter key to continue*/        return 0;}


1
0 0
原创粉丝点击