C语言 - 字符串分割

C语言中分割字符串有多种实现方法,下面我将介绍其中几种不同的方法:

1、使用strtok函数

char *strtok(char *str, const char *delim);

strtok函数可以根据指定的分隔符拆分字符串。其原型如下:

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


int main()
{
    char str[80] = "1001#8888#你好#1993#世界";
    const char s[2] = "#";// 分割字符串,以逗号和空格作为分隔符
    char* token;

    char* strArray[10];//指针数组

    /* 获取第一个子字符串 */
    token = strtok(str, s);
    /* 用数组保存第一个子字符串 */
    strArray[0] = token;
    int i = 1;

    while (token != NULL)
    {
        /* 打印子字符串 */
        printf(" %s\n", token);

        /* 获取下一个子字符串 */
        token = strtok(NULL, s);
        /* 用数组保存第一个之后的子字符串 */
        strArray[i] = token;
        i++;

    }

    //遍历数组
    for (int i = 0; i < 5; i++)
    {
        printf("Array[%d] =  %s\n", i, strArray[i]);
    }

    return(0);
}

这里使用 strtok 函数可以将字符串分割成多个子字符串,其中第一个参数为需要分割的字符串,第二个参数为分隔符。函数会返回分割后的子字符串的指针,通过循环调用 strtok 函数来获取所有子字符串。

 运行结果:

 

2、使用 sscanf 函数

#include <stdio.h>
#include <string.h>
 
int main() 
{
    char str[] = "Hello World,Welcome";
    char token[20];  // 存储分割后的子字符串
    char delimiter[3] = ", ";  // 分隔符
    int i = 0;
    
    while (sscanf(str+i, "%[^, ]%n", token, &i) == 1) {
        printf("%s\n", token);
        i += strspn(str+i, delimiter);
    }
    
    return 0;
}

这里使用 sscanf 函数结合正则表达式可以从字符串中逐个读取分割后的子字符串。循环遍历整个字符串,每一次使用 %[^, ]%n 格式来匹配子字符串,并通过 %n 记录读取的字符数,并更新下一次读取的位置。

 

3、手动实现分割函数

#include <stdio.h>
#include <string.h>
 
void splitString(char *str, const char *delimiter) 
{
    char *token = strtok(str, delimiter);
    
    while (token != NULL) 
    {
        printf("%s\n", token);
        token = strtok(NULL, delimiter);
    }
}
 
int main() 
{
    char str[] = "Hello World,Welcome";
    splitString(str, ", ");
    
    return 0;
}

这种方法是手动实现分割函数,通过编写一个函数来实现字符串的分割。函数内部使用 strtok 函数来进行子字符串的分割,循环遍历获取子字符串。

 

posted @ 2024-03-21 15:02  [BORUTO]  阅读(1376)  评论(0编辑  收藏  举报