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