码迷,mamicode.com
首页 > 编程语言 > 详细

C语言 字符串切割

时间:2019-09-28 23:46:45      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:子串   col   多次   要求   cat   c语言   指针   string   不可   

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* 字符串切割函数 */

/*
知识补充:
    1. 函数原型:
    char *strtok(char *str, const char *delim);
    char *strsep(char **stringp, const char *delim);

    2. 功能: 
    strtok和strsep两个函数的功能都是用来分解字符串为一组字符串。str为要分解的字符串,delim为分隔符字符串。

    3. 参数说明:
    str(stringp)要求不可以是 const char *,因为 strtok 或者 strsep 都会修改 str 的值(修改指针的值)
    delim 可以多个字符的集合,strtok(strsep)会按单个字符切割子串

    4. 返回值:
    从str开头开始的第一个子串,当没有分割的子串时返回NULL。

    5. 相同点:
    两者都会改变源字符串,想要避免,可以使用strdupa(由allocate函数实现)或strdup(由malloc函数实现)。

    6. 不同点:
    a. strtok函数第一次调用时会把s字符串中所有在delim中出现的字符替换为NULL。然后通过依次调用strtok(NULL, delim)得到各部分子串。
    b. strsep函数第一次调用时会把s字符串中所有在delim中出现的字符替换为‘\0‘。然后通过依次调用strtok(stringp, delim)得到各部分子串。
    c. strsep在切割字符串的过程中,可能多次返回空字符串(‘\0‘),但是 strtok 只会在结束时才返回 NULL
    d. strtok 内部记录上次调用字符串的位置,所以不支持多线程,可重入版本为strtok_r
    e. strsep支持多线程

*/

void test()
{
    char p[] = "hello this world . the world is good .";
    char *pcIndex = p;
    char *token = NULL;

    while (token = strsep(&buf, ". "), token)
    {
        //*token 可能会等于 ‘\0‘
        if (*token)
        {
            printf("--[%s]---[%p]---buf[%p]--\n", token, token, buf);
        }
    }

}

int main()
{
    test();
    return 0;
}

 

C语言 字符串切割

标签:子串   col   多次   要求   cat   c语言   指针   string   不可   

原文地址:https://www.cnblogs.com/zhanggaofeng/p/11605149.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!