库函数strstr的模拟实现
- 注意strstr函数在从父串中找子串时,可能会遇到一开始字符串相同而后续不同的情况,比如在ababcefg中寻找子串abc,第一次比对后没有找到,比对后父串的指针指在第四个元素,而子串的指针是回到首地址,我们下次就要从父串的第二个元素开始寻找,这时我们可以在寻找过程的外面保存父串的地址,没有找到,指针就加一,子串指针就重新从首地址开始,两个指针重新开始比对。
- strstr函数没有在父串中找到子串,返回空指针NULL。
#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strstr(const char* s1, const char* s2)
{
assert(s1 && s2);
const char* cp = s1;
if (*s2 == '\0')
{
return (char*)s1;
}
while (*cp)
{
const char* p1 = cp;
const char* p2 = s2;
while ( (*p1) && (*p2) && (*p1 == *p2) )
{
p1++;
p2++;
}
if (*p2 == '\0')
{
return (char*)cp;
}
cp++;
}
return NULL;
}
int main()
{
char arr1[] = "ababcdefg";
char arr2[] = "abc";
if (my_strstr(arr1, arr2) != NULL)
{
printf("找到了!");
}
else
{
printf("找不到!");
}
return 0;
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f9e1c7976fff953cdfbc4ade3fab5cdf.png)