从字符串str1中查找是否有字符串str2,如果有,从str1中的str2位置起,返回str1的指针,如果没有,返回null。
图解思路
判断s1,s2是否相等,若相等,则s1,s2同时向后移一位;若不相等,cur后移一位,s1=cur。循环判断。
代码实现
#include<stdio.h>
#include<assert.h>
char* my_strstr(const char*str, const char*substr)
{
assert(str != NULL);
assert(substr != NULL);
const char *s1;
const char *s2;
const char *cur = str;
if (*substr == '\0')
{
return (char *)str;
}
while (*cur)
{
s1 = cur;
s2 = substr;
while (*s1 && *s2 && *s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return (char *)cur;
}
cur++;
}
return NULL;
}
int main()
{
const char *p = "abcdefghij";
const char *q = "cdef";
char *ret = my_strstr(p, q);
if (ret == NULL)
{
printf("不存在\n");
}
else
{
printf("%s\n", ret);
}
return 0;
}