这篇文章一般般,属于是心态崩了无数次之后的产物,谨慎阅读
目录
strstr函数的作用
strstr函数一共需要有两个参数,str1与str2
函数主要作用就是 在字符串str1中扫描 是否包含字符串str2
如果在str1中找到了str2,则返回str1中首次出现 str2的第一个元素 的指针地址
如果没有找到,则返回空指针NULL
库函数 补充:若传值的str2指针指向的字符串为空值,则返回指针str1
手搓strstr的思路
![](https://img-blog.csdnimg.cn/2d4a87d2cfd14e8c97eaf171fa794b75.jpeg)
![](https://img-blog.csdnimg.cn/4944cdce526a4bf0bed8db3edf6c86df.jpeg)
![](https://img-blog.csdnimg.cn/6c7075f11a8844bc9d9844b1475259e4.jpeg)
![](https://img-blog.csdnimg.cn/51e6278db01849a992f5d9b02769b72a.jpeg)
![](https://img-blog.csdnimg.cn/b9a051100df342a88169fd191d152e07.jpeg)
![](https://img-blog.csdnimg.cn/4d2ffe8992144572bc13aea8f64a1fdf.jpeg)
![](https://img-blog.csdnimg.cn/701be5285c4342f78a4d611efdd54aaf.jpeg)
![](https://img-blog.csdnimg.cn/5990f26dd0574929ba10ece67870eadc.jpeg)
![](https://img-blog.csdnimg.cn/4e91914e0d064e47a26a6eac96af185c.jpeg)
![](https://img-blog.csdnimg.cn/7e38699db5ed4b1b9f63703899ffe5d5.jpeg)
![](https://img-blog.csdnimg.cn/39db301554f34ff183771fda0922b4fb.jpeg)
![](https://img-blog.csdnimg.cn/6b63537aebba4da1bbc0a3fad08aa451.jpeg)
![](https://img-blog.csdnimg.cn/78424c09acec40beaccc21016be0395b.jpeg)
![](https://img-blog.csdnimg.cn/747199edf84a4a739ac1993736f809e9.jpeg)
![](https://img-blog.csdnimg.cn/acc1267688134b45bf459c4bec5d217d.jpeg)
![](https://img-blog.csdnimg.cn/bcbbdbb0b471418d8f7e12ede9bf7bc3.jpeg)
![](https://img-blog.csdnimg.cn/ffa02b1f109b47fca37126fef5813146.jpeg)
![](https://img-blog.csdnimg.cn/389e04ec586b42fc92fdfc39e99ce5ba.jpeg)
实践手搓str
#include<stdio.h>
#include<assert.h>
char* my_strstr(const char* str1,const char* str2)
{
assert(str1 && str2);
const char* s1 = NULL;
const char* s2 = NULL;
const char* cp = str1;
if (*str2 == '\0')
{
return (char*)str1;
}
//当*cp指向了\0时,还未从循环中返回,则结束循环,返回空指针表示无
while (*cp)
{
s1 = cp;
s2 = str2;
//需要指针自增以进行对比,直到不同. s1/s2为空时代表函数到尽头了必须退出
while (s1 && s2 && (*s1 == *s2))
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return (char*)cp;
}
cp++;
}
//没找到
return NULL;
}
int main()
{
char arr1[] = "abcdddddef";
char arr2[] = "de";
char* ret = my_strstr(arr1, arr2);
if (ret == NULL)
{
printf("没找到%s\n",ret);
}
else
{
printf("找到了%s\n", ret);
}
return 0;
}