《C语言 — 切割字符串sscanf和strtok》

一、利用strtok()函数进行分割
函数头文件#iinclude<string.h>
函数原型:char *strtok(char s[], const char *delim);s[]是原字符串,delim为分隔符
返回:字符串拆分后的首地址。 “拆分”:将分割字符用 '\0’替换
特性:
1)strtok拆分字符串是直接在 原串 上操作,所以要求参1必须,可读可写(char *str = “www.baidu.com” 不行!!!)

2)第一次拆分,参1 传待拆分的原串。 第1+ 次拆分时,参1传 NULL.

void test01()
{    //1.使用strtok()实现分割
    char str[] = "hello,world hello";
    char* str1 = strtok(str, " ,");
    printf("%s\n", str1);
    while (str1 != NULL)
    {
         str1 = strtok(NULL, " ,");
         printf("%s\n", str1);
    }
}

 

二、利用正则表达式实现

函数原型:int sscanf (char *str, char * format [, argument, …]);
与scanf()区别,scanf的输入是在键盘输入的,而sscanf()是在用户定义的缓冲区获取的固定格式的数据。
返回值:读取成功的参数个数,失败是-1
利用正则表达式实现邮箱地址与类型的分割:

void test02()
{
    //2.使用sscanf()实现固定格式的读取。
    //函数原型:int sscanf (char *str, char * format [, argument, ...]);
    //与scanf()区别,scanf的输入是在键盘输入的,而sscanf()是在用户定义的缓冲区获取的固定格式的数据。
    char str[] = "894529306@qq.com";
    int b;
    char c[10];
    int n=sscanf(str, "%d@%[a-z]", &b, c);
    printf("用户名%d\n", b);
    printf("邮箱类型%s\n", c);
    printf("返回值%d\n", n);//返回值为成功读取的参数个数,失败为-1
}

 

posted @ 2020-08-17 17:33  一个不知道干嘛的小萌新  阅读(305)  评论(0编辑  收藏  举报