c语言的split字符串分割(函数strtok)

c语言的split字符串分割(函数strtok)

1、说明:

在C语言中实现对字符串的分割(多亏了strtok函数)

2、案例讲解

1、Strtok()函数详解: 该函数包含在"string.h"头文件中

1) 函数原型: char* strtok (char* str,constchar* delimiters ); 2) 函数功能: 切割字符串,将str切分成一个个子串 3) 函数参数:

str:在第一次被调用的时间str是传入需要被切割字符串的首地址;在后面调用的时间传入NULL。

delimiters:表示切割字符串(字符串中每个字符都会 当作分割符)。

4) 函数返回值:

当s中的字符查找到末尾时,返回NULL;

如果查不到delimiter所标示的字符,则返回当前strtok的字符串的指针。

使用strtok()函数:

#include

#include

int main(void)

{

char buf[]="hello@boy@this@is@heima";

char *temp = strtok(buf,"@");

while(temp)

{

printf("%s\n",temp);

temp = strtok(NULL,"@");

}

return 0;

}

上述代码运行结果:

结论: strtok在切割字符串的时间,实际上就是将分割符的字符delimiter替换为'\0'并且返回首地址。

2、自己实现strtok()函数原理:

函数代码:

#include

#include

//根据函数原型实现strtok()函数

char* myStrtok_origin(char* str_arr,constchar* delimiters,char**temp_str)

{

//定义一个指针来指向待分解串

char*b_temp;

/*

* 1、判断参数str_arr是否为空,如果是NULL就以传递进来的temp_str作为起始位置;

* 若不是NULL,则以str为起始位置开始切分。

*/

if(str_arr == NULL)

{

str_arr =*temp_str;

}

//2、跳过待分解字符串

//扫描delimiters字符开始的所有分解符

str_arr += strspn(str_arr, delimiters);

//3、判断当前待分解的位置是否为'\0',若是则返回NULL,否则继续

if(*str_arr =='\0')

{

return NULL;

}

/*

* 4、保存当前的待分解串的指针b_temp,调用strpbrk()在b_temp中找分解符,

* 如果找不到,则将temp_str赋值为待分解字符串末尾部'\0'的位置,

* b_temp没有发生变化;若找到则将分解符所在位置赋值为'\0',

* b_temp相当于被截断了,temp_str指向分解符的下一位置。

*/

b_temp = str_arr;

str_arr = strpbrk(str_arr, delimiters);

if(str_arr == NULL)

{

*temp_str = strchr(b_temp,'\0');

}

else

{

*str_arr ='\0';

*temp_str = str_arr +1;

}

//5、函数最后部分无论找没找到分解符,都将b_temp返回。

return b_temp;

}

//使用myStrtok来简化myStrtok_origin函数

char* myStrtok(char* str_arr,constchar* delimiters)

{

staticchar*last;

return myStrtok_origin(str_arr, delimiters,&last);

}

int main(void)

{

char buf[]="hello@boy@this@is@heima";

//1、使用myStrtok_origin()函数

char*temp_str = NULL;

char*str = myStrtok_origin(buf,"@",&temp_str);

while(str)

{

printf("%s ",str);

str = myStrtok_origin(NULL,"@",&temp_str);

}

//2、使用myStrtok()函数

char*str1 = myStrtok(buf,"@");

while(str1)

{

printf("%s ",str1);

str1 = myStrtok(NULL,"@");

}

return0;

}

拓展知识点:

可重入与不可重入函数

可重入函数: 指一个可以被多个任务调用的函数(过程),任务在调用时不必担心数据是否会出错。

不可重入函数: 如果函数接口的代码实现中在块内定义和使用了static存储类型的变量,这种函数将是不可重入函数。它在实时系统中是不安全函数

相关推荐

电视红包怎么使用教程 电视上的红包怎么抢
365万博首页

电视红包怎么使用教程 电视上的红包怎么抢

📅 08-02 👁️ 2664
企业无线覆盖:优化企业网络的解决方案
365bet网址多少

企业无线覆盖:优化企业网络的解决方案

📅 06-28 👁️ 7717
国美促销活动有哪些?如何把握优惠信息?
365万博首页

国美促销活动有哪些?如何把握优惠信息?

📅 07-13 👁️ 2076
打扰了是什么意思
365万博首页

打扰了是什么意思

📅 08-07 👁️ 4060
【步骤图】馕!的做法
365bet亚洲版登录

【步骤图】馕!的做法

📅 10-08 👁️ 3015
豹子的速度有多快?
365bet亚洲版登录

豹子的速度有多快?

📅 09-23 👁️ 6940