您的位置:首页 > 其它

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

2015-03-22 11:16 525 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: