#include<stdio.h>
#include<windows.h>
char *my_strstr(const char *str, const char *str1)
{
char *p = NULL;
char *q = NULL;
char *np = NULL;
p = str;
while (*p)
{
np = p;
q = str1;
for (; *np && *q && (*np == *q); np++, q++){
}
if (*q =='\0'){
return p;
}
if (*np == '\0'){
break;
}
p++;
}
return NULL;
}
int main()
{
const char str[32] = "abcdef";
char str1[32] = "cde";
char *arr = my_strstr(str, str1);
printf("%s\n", arr);
system("pause");
return 0;
}
函数算法思想:
这个函数一共定义三个指针,p,q,np,p指向str首元素,q指向str1首元素,让np=p,即np也指向str首元素
创建一个while循环语句,把条件 p=str,写在while循环外面,p只初始化一次
在while循环里,循环退出的条件为 *p=0;也就是将str里的元素循环完后自动退出
在while内加一个for循环,初始条件为,q=str,np=p;且每次退出for循环时初始条件都要重新初始化,
for循环判断条件,&&*np&&*q&&*np==*q;判断str1是否为str的字串
if(q=='\0') return p;说明str1被找到了,直接返回子串
if(np==‘\0’)return null; 说明子串没有找到,返回null
这两种情况之外就是q!='\0';np!='\0';说明没有找完,p++,继续从下一个str里的元素开始找。