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

      学习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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值