列出网站目录,东营市信息网官网,宁夏网站建设价格,搜索引擎排名竞价https://www.cnblogs.com/Bob-tong/p/6610806.html Strtok()函数详解#xff1a; 该函数包含在string.h头文件中 函数原型#xff1a; char* strtok (char* str,constchar* delimiters ); 函数功能#xff1a; 切割字符串#xff0c;将str切分成一个个子…https://www.cnblogs.com/Bob-tong/p/6610806.html Strtok()函数详解 该函数包含在string.h头文件中 函数原型 char* strtok (char* str,constchar* delimiters ); 函数功能 切割字符串将str切分成一个个子串 函数参数 str在第一次被调用的时间str是传入需要被切割字符串的首地址在后面调用的时间传入NULL。 delimiters表示切割字符串字符串中每个字符都会 当作分割符。 函数返回值 当s中的字符查找到末尾时返回NULL; 如果查不到delimiter所标示的字符则返回当前strtok的字符串的指针。 使用strtok()函数: #includestdio.h
#includestring.h
int main(void)
{char buf[]helloboythisisheima;char*temp strtok(buf,);while(temp){printf(%s ,temp);temp strtok(NULL,);}return0;
} 预计输出结果 hello boy this is heima 实际运行结果 得到的结论 strtok在切割字符串的时间实际上就是将分割符的字符delimiter替换为\0并且返回首地址。 自己实现strtok()函数原理 函数代码 #includestdio.h
#includestring.h
//根据函数原型实现strtok()函数
char* myStrtok_origin(char* str_arr,constchar* delimiters,char**temp_str)
{//定义一个指针来指向待分解串char*b_temp;/** 1、判断参数str_arr是否为空如果是NULL就以传递进来的temp_str作为起始位置* 若不是NULL则以str为起始位置开始切分。*/if(str_arr NULL){str_arr *temp_str;}//2、跳过待分解字符串//扫描delimiters字符开始的所有分解符str_arr strspn(str_arr, delimiters);//3、判断当前待分解的位置是否为\0若是则返回NULL否则继续if(*str_arr \0){return NULL;}/** 4、保存当前的待分解串的指针b_temp调用strpbrk()在b_temp中找分解符* 如果找不到则将temp_str赋值为待分解字符串末尾部\0的位置* b_temp没有发生变化若找到则将分解符所在位置赋值为\0,* b_temp相当于被截断了temp_str指向分解符的下一位置。*/b_temp str_arr;str_arr strpbrk(str_arr, delimiters);if(str_arr NULL){*temp_str strchr(b_temp,\0);}else{*str_arr \0;*temp_str str_arr 1;}//5、函数最后部分无论找没找到分解符都将b_temp返回。return b_temp;
}
//使用myStrtok来简化myStrtok_origin函数
char* myStrtok(char* str_arr,constchar* delimiters)
{staticchar*last;return myStrtok_origin(str_arr, delimiters,last);
}
int main(void)
{char buf[]helloboythisisheima;//1、使用myStrtok_origin()函数char*temp_str NULL;char*str myStrtok_origin(buf,,temp_str);while(str){printf(%s ,str);str myStrtok_origin(NULL,,temp_str);}//2、使用myStrtok()函数char*str1 myStrtok(buf,);while(str1){printf(%s ,str1);str1 myStrtok(NULL,);}return0;
}