C语言字符串分割的两种方式

一、利用strtok()函数进行分割
函数头文件#iinclude
函数原型: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[] = "[email protected]";
	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
}

希望大家有所指教,共同进步!!

你可能感兴趣的:(c语言,字符串)