您的位置:首页 > 编程语言 > C语言/C++

C语言:strtok函数小结

2014-02-10 12:08 489 查看
C语言:strtok函数小结

        前几天第一次用strtok函数来分割字符串,看了一些该函数的示例,有一些困惑。为什么第一次传入的数组名,第二次传入NULL。经过摸索后,终于明白strtok函数是怎么个用法了。

       个人觉得,主要原因是strtok函数的源码中使用了static变量。本人找不到源码,于是自己写一个功能相同的函数,代码如下:

char *mystrtok( char *input,const char *str){

 static char *move=NULL;

 char *save_input;

 int i,j,len;

 if(input!=NULL)

  move=input;

 if(*move=='\0')

  save_input=NULL;

 else save_input=move;

 len=strlen(str);

 while(*move!='\0'){

  for(i=0;i<len;i++){

   if(str[i]==*move){

    *move='\0';

    move++;

    return save_input;

   }

  }

  move++;

 }

 return save_input;

}
 顺带一提,strtok函数中的第二个参数是为分隔符字符串,该字符串中的所有字符(除了'\0'外)都将成为分隔符,并用'\0'来替换。举个例子:

strtok(input, "bd");中的第二个参数是"bd",则”bd"中的'b'、'd’都成为分隔符,当字符数组input中遇到'b'或者'd'时,就用'\0'来替换。该函数用一次,替换一次。

strtok函数的实现方式大致如下:

(1)当第一个参数不为NULL时,从输入的字符串的首地址开始查找分隔符,找到分隔符,替换成'\0',然后移动下一个字符,作为下一次的起始查找位置,最后返回本次查找的起始查找地址,因为第一次是从字符串的首地址开始,故第一次返回该字符串的首地址,如果第一次查找便找不到分隔符,则查找会停在字符串末尾的'\0'处,然后返回字符串的首地址。

(2)若第一个参数为NULL,则从上一次查找后停在的位置开始,继续查找,查找方式和(1)相同。所以,第一次用strtok函数时第一个参数不能为NULL,否则会由于内存不可读而报错。

(3)若某一次(除去第1次)查找开始时,第一个字符便是'\0',则返回NULL。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言 函数