今天我们来模拟实现strstr这个函数,首先我们先来了解一下这个函数,这个函数原型为

char *strstr(char *str1,char *str2),功能是:从字符串str1中查找是否有符串str2,若str2是str1的子串,则先确定str2在str1的第一次出现的位置,并返回此str1在str2首位置的地址,如果str2不是str1的子串,则返回NULL。下面我们来看代码:

#include <stdio.h>
#include <assert.h>
char *my_strstr (const char *str,const char *substr)
{const char *str1 = str;const char *str2 = substr;const char *start = NULL;assert(str);assert(substr);while (*str1){start = str1;  //将str1所指向的地址传给startwhile (*str1 && *str2 && *str1 == *str2)//通过循环在str1中找是否有str2{str1++;str2++;}if (*str2 == '\0')return (char*)start;str1 = start + 1; //str1中没有找到str2,则指针向后移一位,继续进行查找str2 = substr;}return NULL;
}
int main()
{char *p = my_strstr("abcccdef","cdef");if (p != NULL)printf("%s\n",p);
}