#include <string.h>
#include <stdio.h>
char *mystrtok(char *str,const char *delim)
{
static char *temp; //保存传进来的地址
char *p=(str == NULL) ? temp : str; //保存第一次出现的首地址 三目运算
char *p_temp=p; //动态地址
while(*p_temp != '\0')
{
if(*p_temp == *delim)
{
*p_temp = '\0'; //让delim的位置变为\0作为传回去的结束符
temp=++p_temp; //保存上一次结束的位置 即delim下一个字符的位置
return p;
}
p_temp++; //指针偏移
if(*p_temp == '\0') //判断字符串是否为最后一组可分割的字符串
{
temp=p_temp;
return p;
}
}
//printf("%d\n",__LINE__);
}
int main ()
{
char str[80] = "This is - www.runoob.com - website";
char *arr1,*arr2,*arr3,*arr4;
arr1=mystrtok(str,"-");
printf("main ARR1 :%s \n",arr1 );
arr2=mystrtok(NULL,"-");
printf("main ARR2 :%s \n",arr2 );
arr3=mystrtok(NULL,"-");
printf("main ARR3 :%s \n",arr3 );
arr4=mystrtok(NULL,"-"); //这一个其实已经是NULL,
//目的就是去验证mystrtok是否能够对最后的字符串作出判断以及返回结果
printf("main ARR4 :%s \n",arr4 );
putchar('\n');
char str1[80] = "This is - www-runoob-com - website";
const char s[2] = "-";
char *token;
/* 获取第一个子字符串 */
token = mystrtok(str1,s);
/* 继续获取其他的子字符串 */
while( token != NULL ) {
printf( "%s\n", token );
token = mystrtok(NULL,s);
}
printf("%d\n",__LINE__);
return(0);
}
执行结果如下: