浅谈 my_strstr()函数与my_strrstr()函数的实现


my_strstr()函数:在s1中查找整个s2第一次出现的起始位置,并返回一个指向该位置的指针,如果s2没有完整的出现在s1中,则返回NULL;(实际就是实现库中的strstr())

my_strrstr()函数:在s1中查找整个s2最后一次出现的起始位置,并返回一个指向该位置的指针,如果s2没有完整的出现在s1中,则返回NULL。(实际就是实现库中的strrstr())


/****************************************  
*  File Name  : my_strstr.c  
*  Creat Data : 2015.3.22 
*  Author     : wk  
*****************************************/ 
#include<stdio.h>
#include<assert.h>
char const *my_strstr(char const *str,char const *dst)
{
    char const *p=str;
	char const *q=dst;
	assert(NULL!=str&&NULL!=dst);
	if(*dst=='\0')
		return NULL;
   while(*str!='\0'&&*dst!='\0')
   {
      if(*str!=*dst)//当遍历字符串是dst中有一个字符与str的不相等时
	  {  //if(*str++!=*dst++)
		  dst=q;       //dst就重新指向自己字符串的首地址
		  str=++p;     //str就有指向自己的下一个字符的地址
	  }
	 str++;
	 dst++;
   }
   if(*dst=='\0')//当while循环执行完后,dst指向'\0',表示找到了匹配的,此时p指向的是str中匹配dst的字符串首地址
   {
     return p;
   }
  return NULL;
}
/****************************************  
*  File Name  : my_strrstr.c  
*  Creat Data : 2015.3.22 
*  Author     : wk 
*****************************************/ 
//#include"my_strstr"
char const  *my_strrstr(char const *str,char const *dst)
{
    char const *ret=NULL;
	char const *cur=my_strstr(str,dst);//先找一次,返回该位置的指针
	while(NULL!=cur)
	{
     	ret=cur;//存放第一次查找到的指针,防止第一次查找即是最后一次查找
		cur=my_strstr(cur+1,dst);//从返回的指针指向的下一个字符开始查找
   
	}
	return ret;

}

/****************************************  
*  File Name  : main.c  
*  Creat Data : 2015.3.22 
*  Author     : wk  
*****************************************/
//#include"my_strstr()"
int main()
{
  char *a="abcdabbc";
  printf("%s\n",my_strstr(a,"bc"));
  printf("%s\n",my_strrstr(a,"bc"));  
  
 return 0;
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值