这是我的源代码:
size_t ft_strlen(char const *str)
{
return ((*str) ? ft_strlen(++str) + 1 : 0);
}
int ft_memcmp(void const *s1, void const *s2, size_t const n)
{
size_t i;
i = 0;
while (i < n)
{
if (((char *)s1)[i] != ((char *)s2)[i])
return (((char *)s1)[i] - ((char *)s2)[i]);
i++;
}
return (0);
}
char *ft_strstr(char *s1, char const *s2)
{
if (!*s1)
return (NULL);
return (!ft_memcmp(++s1, s2, ft_strlen(s2)) ? s1 : NULL);
}
int main(void)
{
printf("%s\n", ft_strstr("Bonjour", "jour"));
return (0);
}
我的返回值有问题。在主要功能中,为什么它不返回s1,这里是“jour”?
答案 0 :(得分:0)
你致电ft_strstr("Bonjour", "jour");
ft_strstr调用ft_memcmp("onjour", "jour")
。
ft_memcmp返回'o' - 'j',这不是零,所以
return (!ft_memcmp(++s1, s2, ft_strlen(s2)) ? s1 : NULL);
返回NULL
您的问题是ft_strstr
:
我想你想以递归方式做到这一点?如果是这种情况,则忘记了递归
这是一个应该有效的递归实现的例子。
char *ft_strstr(char *s1, char const *s2)
{
if (!*s1)
return (NULL);
if (!ft_memcmp(s1, s2, ft_strlen(s2)))
return (s1);
return (ft_strstr(s1 + 1, s2));
}