strtok函数

函数原型
char * strtok ( char * str, const char * delimiters );
  • 功能

    多次调用这个函数将str以delimiters分割点分割成连续的字符串

  • 特点

    第一次调用函数期望一个C字符串作为str参数。
    以后的调用期望一个null指针做为str参数,并使用上一个token最后位置的后一个位置做为起始地址。

  • 注意
    1. 为了确定一个token的开始和结尾,函数从开始位置寻找第一个不在delimiters中的字符,这个字符会成为token的第一个字符。然后再寻找第一个在delimiters中的字符,那个字符成为token的end。如果null终止符被发现,函数也会结束。
    2. token的end会自动被null字符替换,token的开始位置作为返回值返回。
    3. 一旦发现str中的null字符串,接下来所有的对这个函数的调用(使用null做为第一个参数)都会返回 null指针。
    4. 最后一个分割的token的指针会被保留在函数内部,在下一次调用中会被使用。

函数源码
char * strtok(char *s, const char *delim)
 {
    static char *lasts;

    return strtok_r(s, delim, &lasts);
}

strtok_r(char *s1, const char *s2, char **lasts)
{
   char *ret;

   if (s1 == NULL)                //第一次调用之后的调用,都使用前一次记录的位置
     s1 = *lasts;
   while(*s1 && strchr(s2, *s1))  //找到第一个没出现在delimiter中的字符
     ++s1;
   if(*s1 == '\0')                //如果遇到NULL字符 那么之后的调用(str==NULL)都会返回NULL
     return NULL;
   ret = s1;                      //s1就是token的第一个位置
   while(*s1 && !strchr(s2, *s1)) //找到第一个出现在delimiter中的字符
     ++s1;
   if(*s1)                        //token中的end自动被替换成null
     *s1++ = '\0';
   *lasts = s1;                   //记录下一次开始的位置
   return ret;
 }

例子
/* strtok example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="- This, a sample string.";
  char * pch;
  printf ("Splitting string \"%s\" into tokens:\n",str);
  pch = strtok (str," ,.-");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, " ,.-");
  }
  return 0;
}
Splitting string "- This, a sample string." into tokens:
This
a
sample
string
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值