C语言字符串分割的两种方式
·
一、利用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, " ,");
if(NULL == str1)
break;
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
}
希望大家有所指教,共同进步!!
更多推荐
已为社区贡献1条内容
所有评论(0)