#include
char* mystrstr(char*p1,char*p2)
{
char*s1=NULL;
char*s2=NULL;
char*cur=p1;
if(*p2)
{
return p1;}
while(*cur)
{
s1=cur;
s2=p2;
while((*s1!='\0')&&(*s2!='\0')&&(*s1==*s2))
{
s1++;
s2++;}
if(*p2)
{
return cur;}
cur++;
}
return NULL;}
int main()
{
char *p1="abcdef";
char *p2 ="bcd";
char* ret=mystrstr(p1,p2);
if(ret==NULL)
printf("z");
else
printf("%s\n",ret);
return 0;
}
问题稍微有点多,我先大体说下问题
if(*p2)
{
return p1;}
//...
if(*p2)
{
return cur;}
这里显然是希望当p2指向空字符时返回。但是p2第一个字符不为空字符,直接就return了,建议改为
if(*p2 == '\0')
程序走到这直接返回一个p1,mystrstr函数基本白写
if(*p2)
{
return p1;}
char* mystrstr(char* p1, char* p2)
{
char* s1 = NULL;
char* s2 = NULL;
char* cur = p1;
if (*p2 == '\0')
{
return p1;
}
while (*cur != '\0')
{
s1 = cur;
s2 = p2;
while ((*s1 != '\0') && (*s2 != '\0') && (*s1 == *s2))
{
s1++;
s2++;
}
if (*s2 =='\0')
{
return cur;
}
cur++;
}
return NULL;
}