网站建设公司net2006引擎搜索技巧
1、strstok 函数通过特定字符分割字符串
该函数用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数delimiters则为分割字符串中包含的所有字符。当strtok()在参数s的字符串中发现参数delimiters中包涵的分割字符时,则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的指针。
需要注意的是,使用该函数进行字符串分割时,会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。第一次分割之后,原字符串str是分割完成之后的第一个字符串,剩余的字符串存储在一个静态变量中,因此多线程同时访问该静态变量时,则会出现错误。
#include <stdio.h>
#include <string.h>int main(int argc, char *argv)
{char temp_str[] = "I,Love,the,panda,of,china";char * str = strtok(temp_str,",");while(str) {printf("str: %s \n",str);str = strtok(NULL,",");if(str == NULL)break;}return 0;
}运行结果:
str: I
str: Love
str: the
str: panda
str: of
str: china
2、strstok_s 函数通过特定字符分割字符串
char *strtok_r(char *str, const char *delim, char **saveptr);
该函数也会破坏带分解字符串的完整性,但是其将剩余的字符串保存在saveptr变量中,保证了安全性。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{char str[]="I Love,the panda,of china";char *ptr;char *p;printf("before strtok: str=%s\n",str);printf("begin:\n");ptr = strtok_r(str, ",", &p);while(ptr != NULL){printf("str=%s\n",str);printf("ptr=%s\n",ptr);ptr = strtok_r(NULL, ",", &p);}return 0;
}运行结果:
before strtok: str=I Love,the panda,of china
begin:
str=I Love
ptr=I Love
str=I Love
ptr=the panda
str=I Love
ptr=of china