【C语言】使用函数strtok切割指定字符串,并挨个保存

简述:假如我碰到一串字符,例:,+8613466630259,98/10/01,18:22:11+00,ABCdefGHI";这里面有电话,日期,时间,以及内容,都通过逗号隔开,那该如何去把这些内容挨个提取出来,下方解答;

一,代码

#include <string.h>

#include <stdio.h>

#include <stdlib.h>

int msg_deal(char *msg_src, char *msg_done[], char *str)

// msg_src表示待切割字符串的首地址,此处则是一整个字符串

// msg_done表示被切割后的字符串,存放的首地址

// str表示,切割的字符

{

    msg_done[0] = msg_src;

    int i = 0;

    while ((msg_done[i] = strtok(msg_done[i], str)) != NULL)

    {

        ++i;

    }

    return i; // i返回给了int msg_deal,而下面又把i赋值给了num

}

void test01() // 切割案例(strtok)

{

    char msg_src[] = "+CMGR:RECUNREAD,+8613466630259,98/10/01,18:22:11+00,ABCdefGHI";

    char *msg_done[128] = {NULL}; // 意思是msg_done[]里面128个指针指向的内容都为NULL

    int num = msg_deal(msg_src, msg_done, ","); // 循环次数

    printf("num=%d\n", num);

    printf("电话=%s\n", msg_done[1] + 3);

    char *ret = strchr(msg_done[3], '+');

    if (ret != NULL)

    {

        *ret = '\0';

    }

    printf("时间=%s\n", msg_done[3]);

    printf("日期=%s\n", msg_done[2]);

    printf("日期=%s\n", msg_done[4]);

}

int main(int argc, char const *argv[])

{

    test01();

    return 0;

}

2.输出结果

3.内容详解

  1. test01函数中,定义了一个原始字符串msg_src和一个字符指针数组msg_donemsg_src包含了一个完整的字符串,msg_done是一个具有128个指针元素的数组,初始时所有指针元素都被设置为NULL

  2. 调用msg_deal函数,将msg_srcmsg_done和逗号","作为参数传递给它。

  3. msg_deal函数中,首先将msg_src的地址赋给msg_done[0],这表示切割后的第一个子字符串的地址。

  4. 使用strtok函数进行字符串切割。strtok函数的第一个参数是要切割的字符串,这里是msg_done[i],初始时i为0,所以传递的是msg_src。第二个参数是切割的字符,这里是逗号","strtok函数会返回切割后的子字符串的地址,并将该地址赋给msg_done[i]。循环迭代直到返回值为NULL,表示没有更多的子字符串可以切割。

  5. 在每次循环迭代时,i的值会递增,这样就可以将切割得到的子字符串保存在msg_done数组的不同位置。

  6. 循环结束后,i的值就是切割得到的子字符串的个数。将i作为返回值返回给调用者。

  7. 回到test01函数,在调用msg_deal函数后,将返回的值赋给num,表示切割得到的子字符串的个数。

  8. 使用printf函数打印切割得到的子字符串的个数num

  9. 使用printf函数打印切割得到的子字符串中的内容。根据代码中的打印语句,msg_done[1]表示电话号码,msg_done[2]表示日期,msg_done[3]表示时间,msg_done[4]表示其他内容。

  10. 使用strchr函数查找msg_done[3]中的'+'字符,并将其替换为字符串结束符'\0'。这样做是为了去掉时间字符串中的+00部分。

  11. 最后,main函数调用test01函数,并返回0。

总结来说,这段代码的目的是将原始字符串按照逗号进行切割,并将切割得到的子字符串存储在字符指针数组中。然后,通过打印语句将切割后的子字符串输出到终端。

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值