strtok()
char *strtok(char s[], const char *delim);
参数: s[]是原字符串,delim为分隔符
返回:字符串拆分后的首地址
第一次拆分,参1 传待拆分的原串。 第1+ 次拆分时,参1传 NULL.
strtok案例解析:
#include<stdio.h>
#include<string.h>
int main()
{char string[20] = "1,2,3,4,5";char * str = strtok(string,",");printf("str = %s\n",str);while(str){str = strtok(NULL,",");if(str == NULL){break;}printf("str = %s\n",str);}
}
运行结果:
str = 1
str = 2
str = 3
str = 4
str = 5
例:将string 去掉 " ," 并转化为int类型
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
int main()
{char string[20] = "1,2,3,4,5";int num;int arr[10];int i = 0;char * str = strtok(string,",");while(str){arr[i++] = atoi(str);str = strtok(NULL,",");if(str == NULL){break;}}for(int j=0; j<i;j++){printf("arr[%d] = %d\n",j,arr[j]);}
}
运行结果:
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5
strtok_r
strtok_r 是一个分词函数,与 strtok 功能类似,但它是线程安全的和可重入的
char *strtok_r(char *str, const char *delim, char **saveptr);
saveptr: 一个指向字符指针的指针,它用于存储函数的内部状态,使函数可以在后续调用中恢复其上下文,默认为NULL
案例分析:
#include<stdio.h>
#include<string.h>
int main()
{char string[20] = "1,2,3,4,5";char *saveptr = NULL;char * str = strtok_r(string,",",&saveptr);printf("str = %s\n",str);while(str){str = strtok_r(NULL,",",&saveptr);if(str == NULL){break;}printf("str = %s\n",str);}
}
str = 1
str = 2
str = 3
str = 4
str = 5