strtok.c

来源:互联网 发布:金蝶数据库迁移 编辑:程序博客网 时间:2024/05/18 03:25

原型:char *strtok(char *s, char *delim);

功能:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。

说明:首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL
strtok
s中查找包含在delim中的字符并用NULL('\0')来替换,直到找遍整个字符串。

返回值:从s开头开始的一个个被分割的串。当没有被分割的串时则返回NULL
所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点。

#include <string.h>#include <stdio.h>char string[] = "A string of,tokens and some  more tokens";//要分解的字符串char seps[]   = " ";  //分隔符字符集的字符串char *token;void main( void ){   printf( "%s\n\nTokens:\n", string );   /* Establish string and get the first token: */   token = strtok( string, seps ); //分解字符串为一组字符串   while( token != NULL )   {      /* While there are tokens in "string" */      printf( " %s\n", token );      /* Get next token: */      token = strtok( NULL, seps );//首次调用时,第一个参数string指向要分解的字符串,之后再次调用要把s设成NULL   }}


函数原型:char *strtok(char *s, char *delim);
函数功能:把字符串s按照字符串delim进行分割,然后返回分割的结果。

函数使用说:

1.strtok函数的实质上的处理是,strtok在s中查找包含在delim中的字符并用NULL(’\0′)来替换,直到找遍整个字符串。这句话有两层含义:(1)每次调用strtok函数只能获得一个分割单位。(2)要获得所有的分割单元必须反复调用strtok函数。

2.strtok函数以后的调用时的需用NULL来替换s.

3.形参s(要分割的字符串)对应的变量应用char s[]=”….”形式,而不能用char *s=”….”形式。

例子如下:

#include <stdio.h> #include <string.h> void main() { char buf[]=”Golden Global View”; char* token = strtok( buf, ” “); while( token != NULL ) { printf( ”%s “, token ); token = strtok( NULL, ” “); } return 0; } 


其结果为:

Golden
Global
View

但是如果我们把char buf[]=”Golden Global View”;换成char *buf=”Golden Global View”; 则会出错,原因我还没找到,如果有人发现了原因望告知于我。

如果我们把token = strtok( NULL, ” “);换成token = strtok( buf, ” “);则while循环会成为一个无限循环,而输出的结果就只为:Golden。我的解释原因如下:

在strtok函数体中有一个char 类型的指针(假设为 char *p),它的作用就是令p=s,用于保存s的起始地址。由于在随后的处理中指针p的值会一直保存(C语言中指针的特点),因此在以后的strtok调用中用NULL来代替s的原因就是防止p被重新赋值而指向s的起始地址,从而可以保证p可以指向s的其他位置,直到最后分割完整个字符串。

但是如果用s来代替NULL,那么每次调用strtok时,p就会指向s的初始地址,从而只能获得第一个分割出来的字串,如上面的例子中while会是一个无限循环,而输出的结果只能是“Golden”。

原创粉丝点击