const char* my_strstr(const char* a,const char* b)
{
assert(a && b);
unsigned int i = 0;//因为下面要和strlen的返回值比较,他的返回值是unsigned int
for ( i = 0; i<strlen(a) ;i++)
{
if ((a[i] == b[0]) && (strncmp(a+i,b,strlen(b)) == 0))//第二个条件可以有效防止只有第一个字符相等,和bbcd的情况。
{
break;
}
}//找到出现相同的起始地址。
if (i != strlen(a))
{
a = a + i;
return a;
}
else//找不到就返回NULL
return NULL;
}
int main()
{
char a[] = "abcdef";
char b[] = "bbcd";
char*p = (char*)my_strstr(a, b);//返回值是const char*
if (p)//如果p是空指针,其值为0,条件为假。
{
printf("%s", p);
}
else
{
printf("不存在该子窜\n");
}
return 0;
}
2
char* my_strstr(const char*str1,const char*str2)
{
assert(str1&&str2);
while (*str1)//找到他们最开始相同的位置。
{
char*s1 = (char*)str1;//后面要返回起始地址所以要用一个临时变量代替他来边
char*s2 = (char*)str2;//如果不创建str2,如遇到bbcd的情况他在下一个while中会变。
while ((*s1 == *s2) && *s1 && *s2)//想到if同时又想到用循环,就用while,而且while中如果
//增加条件,他的功能也可以增加,值得去试。
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return (char*)str1;
}
str1++;
}
return NULL;
}
int main()
{
char *str1 = "abcdefghhppo";
char *str2 = "def";
char *ret = my_strstr(str1, str2);
if (ret == NULL)
{
printf("不存在\n");
}
else
{
printf("%s\n", ret);
}
return 0;
}