C 字符串分割

在 C 语言中,我们可以使用 strtok() 函数根据某个分割符来将字符串分割成多个子串。

语法:

strtok(str, delim)

说明:

strtok() 函数接收以下 2 个参数。

  • str(char*):是一个指向字符串的指针。
  • delim(const char*):分割符,它是一个字符串,其中的每个字符都会被视为分隔符。

strtok() 函数会修改原始字符串,将字符串中指定的分割符替换为 '\0',然后返回分割后的第一个子串的指针

提示:

  • strtok 是 “string token(字符串令牌)” 的缩写。strtok() 函数将字符串分割成一个个子串,这些子串也被叫做 “令牌”。
  • strtok() 函数是具有破坏性的,它会修改原始字符串。如果需要保留原始字符串,请先复制一份再进行分割。

示例 1:使用 strtok() 分割字符串

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

int main(void)
{
    char str[] = "Python,C++,Java";

    // 创建原始字符串的副本
    char str_copy[sizeof(str)]; 

    // 复制字符串
    strcpy(str_copy, str);

    // 定义分割符
    const char* delim = ",";

    // 获取第一个子串
    char* token = strtok(str_copy, delim);
    
    // 继续获取其他的子串
    while (token != NULL) 
    {
            printf("%s\n", token);
            // 传递 NULL 来获取下一个子串
            token = strtok(NULL, delim);
    }

    return 0;
}

运行结果如下。

Python
C++
Java

分析:

在使用 strtok() 函数,我们要注意以下 3 点。

  • strtok() 函数是具有破坏性的,它会修改原字符串。在上面例子中,str_copy 数组在分割后会变成 "Python\0C++\0Java"。为了避免修改原始字符串,我们可以使用 strcpy() 函数创建一个副本 str_copy,然后再对其进行操作。
  • strtok() 函数会保存分割后子串的起始位置(即指针),以便下次调用时继续分割。
  • 在第一次调用 strtok() 函数时,需要将第一个参数设置为要分割的字符串;在后续调用时,需要将第一个参数设置为 NULL。(小伙伴们将其视为固定写法即可)

示例 2:strtok() 的分割符可以是多个

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

int main(void)
{
    char str[] = "red,orange*yellow-green$blue";

    // 创建原始字符串的副本
    char str_copy[sizeof(str)]; 

    // 复制字符串
    strcpy(str_copy, str);

    // 定义分割符
    const char* delim = ",*-$";

    // 获取第一个子串
    char* token = strtok(str_copy, delim);

    // 继续获取其他的子串
    while (token != NULL) 
    {
        printf("%s\n", token);
        // 传递 NULL 来获取下一个子串
        token = strtok(NULL, delim);
    }
    
    return 0;
}

运行结果如下。

red
orange
yellow
green
blue

分析:

strtok() 的分割符可以是多个,const char* delim = ",*-$"; 表示分割符可以是 “,*-$” 中的任意一个字符。

上一篇: C 字符串截取

下一篇: C 字符串反转

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号