strstr的实现和模拟

1.函数的调用形式

char *strstr(char const *s1,char const *s2);

2.功能

  • 在s1中查找整个s2第一次出现的起始位置,并返回一个指向该位置的指针。
  • 如果s2并没有完整的出现在s1的任何地方,函数将返回一个NULL指针。
  • 如果第二个参数是一个空字符串,函数就返回s1。

3.实现

#include<stdio.h>
#include<string.h>
int main()
{
    char *s1 = "abcdef";
    char *s2 = "cde";
    char *p = strstr(s1, s2);
    printf("%s", p);
    return 0;
}

这里写图片描述
4.模拟实现

#include<stdio.h>
#include<assert.h>
char *my_strstr(const char *s1, const char *s2)
{
    const char *str1;
    const char *str2;
    const char *cur = s1;
    assert(s1 != NULL);
    assert(s2 != NULL);
    while (*cur != '\0')
    {
        str1 = cur;
        str2 = s2;
        while ((*str1 != '\0')&&(*str2 != '\0')&&(*str1==*str2))//停下条件:两字符串有其一查找完,或者两字符不相等
        {
            str1++;
            str2++;
        }
        if (*str2 == '\0')
        {
            return (char *)cur;
        }
        cur++;
    }
    return NULL;
}
int main()
{
    char *s1 = "abcdef";
    char *s2 = "cde";
    char *p = my_strstr(s1, s2);
    if (p == NULL)
    {
        printf("不存在\n");
    }
    else
    {
        printf("%s", p);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_40995778/article/details/80353323