《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 }