您的位置:首页 > 其它

strtok函数和strtok_r函数的简单实现

2013-10-23 20:35 375 查看
#include <stdio.h>
#include <string.h>

char *mystrtok(char *str, const char *delim)
{
char *s_begin, *s_end;
static char *savep = "";
//"root:0::/root/bash:/usr/bin";
s_begin = (str != NULL) ? str : savep;

s_begin += strspn(s_begin, delim);

if(*s_begin == '\0'){
savep = "";
return NULL;
}

s_end = s_begin + strcspn(s_begin, delim);
if(*s_end != '\0')
*s_end++ = '\0';
savep = s_end;

return s_begin;
}

int main(void)
{
char str[] = "root:0::/ root/ bash:/usr/bin", *token;

token = mystrtok(str, ":");
printf("token:%s\n", token);

while((token = mystrtok(NULL, ":")))
printf("token:%s\n", token);

return 0;
}

strtok_r函数实现

#include <stdio.h>
#include <string.h>

char *my_strtok_r(char *s, const char *delim, char **save_ptr)
{
char *token;

if (s == NULL)
s = *save_ptr;

s += strspn(s, delim);
if (*s == '\0')
return NULL;

token = s;
s = strpbrk(token, delim);  //查找字符串中第一个出现的指定字符

if (s == NULL)
*save_ptr = strchr(token, '\0');
else {
*s = '\0';
*save_ptr = s + 1;
}

return token;
}

int main(void)
{
char str[] = "root:0::/ root/ bash:/usr/bin", *token, *sp = NULL;
printf("        %s\n", str);

token = my_strtok_r(str, ":", &sp);
printf("token:%s\n", token);

while((token = my_strtok_r(NULL, ": ", &sp)))
printf("token:%s\n", token);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: