strtok是字符串切割函数
定义
- 参数一:待切割字符串
- 参数二:分隔符集合
- 首次调用时传递参数为:
strtok(str,seps); - 之后再次调用时传递参数为:
strtok(NULL,seps); - 若可以切割,函数返回值为字符指针,各段切割好的字符串
- 若分割完毕,函数返回值为空指针
举例
用“.“或者”@”切割字符串"litianyi@hust.edu@cn"得到
itianyi hust edu cn
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
int main()
{
char str[30] = "litianyi@hust.edu@cn";
char seps[] = ".@";
char* s1 = NULL;
//第一次调用时strtok函数找到@符号,将@符号改为'\0',记录位置,
//下次调用时strtok函数从'\0'处开始向后切割字符串,所以之后调用传递NULL即可
//可以分析得出strtok函数内部必有static修饰的局部变量
s1 = strtok(str, seps);
printf("%s\n", s1);
//再次调用时找到'.',将‘.'改为'\0',返回hust,记录位置
s1 = strtok(NULL, seps);
printf("%s\n", s1);
//第三次调用时找到'@',将‘@'改为'\0',返回edu,记录位置
s1 = strtok(NULL, seps);
printf("%s\n", s1);
//第四次调用时返回cn
s1 = strtok(NULL, seps);
printf("%s\n", s1);
//第五次调用时返回空指针,结束分割
s1 = strtok(NULL, seps);
if (s1 == NULL)
{
printf("我是空指针");
}
}
运行结果
实际用法
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
int main()
{
char str[30] = "litianyi@hust.edu@cn";
char seps[] = ".@";
char* s1 = NULL;
/*实际用法*/
for (s1=strtok(str,seps);s1!=NULL;s1=strtok(NULL,seps))
{
printf("%s\n", s1);
}
}