首先,先让我们看一下这个函数是如何使用的:
#include <stdio.h>
#include <string.h>
#include<assert.h>
//模拟实现strstr,在第一个字符串中查找另一个字符串,返回的是第一次str2在str1中出现的地址
//char *strstr(const char * str1,const char * str2);
int main()
{
char arr1[] = "this is an apple\n";
const char* p = "is";
char* ret = strstr(arr1, p);
printf("%s", ret);
return 0;
}
调试结果为:因为上面代码中已经提到strstr函数返回的是str2在str1中第一次出现的地址,所以打印出来的也是从第一个is开始的字符串!
下面让我们根据以上内容来模拟实现strstr函数!(可能会有一些小困难,看不懂的友友可以把问题放到评论区,我会及时回复!!!)
#include <stdio.h>
#include <string.h>
#include<assert.h>
//模拟实现strstr
char* my_strstr(const char* str1, const char* str2)
{
const char* s1 = NULL;//初始化s1和s2时置为空防止生成野指针;
const char* s2 = NULL;
const char* cur = str1;
if (*str2 == '\0')
return (char*)str1;//传入str2的特殊情况,当str2为空字符串时,直接返回空字符串,
while (*cur)
{
s1 = cur;
s2 = str2;
while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
{
s1++;
s2++;
}
if(*s2=='\0')
return (char*)cur;
cur++;
}
return NULL;
}
int main()
{
char arr1[] = "this is an apple";
char arr2[] = "is";
char* ret = my_strstr(arr1, arr2);
if (ret == NULL)
printf("找不到!\n");
else
printf("%s", ret);
return 0;
}