自己实现strtok分隔函数的API

#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);
}

执行结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值