学习笔记——strstr函数的C语言实现,不调用库函数

原型:char *strstr(char *haystack, char *needle);
用法:#include <string.h>
功能:从字符串haystack中寻找needle第一次出现的位置(不比较结束符'/0')。
说明:返回指向第一次出现needle位置的指针,如果没找到则返回NULL。
C代码实现如下:

#include <stdio.h>
#include <assert.h>

char *myStrstr(const char *str1, const char *str2)
{
    char *s1, *s2;
   
    assert((str1 != (char *)0) && (str2 != (char *)0)); //对两指针加非0 断言
   
    if (str1 == str2)  //如果两指针指向同一地址,直接返回str1
    {
        return (char *)str1;
    }
   
    while (*str1) //str1用于记录找到子窜的位置
    {
        s1 = (char *)str1;
        s2 = (char *)str2;
       
        //当str2中有字符与str1中的相同并且str1和str2都未至末尾时,循环
        while ((*s1 == *s2) && *s1 && *s2)
        {
            s1++;
            s2++;
        }
        //如果str2已经遍历至末尾('/0')时,说明在str1中找到了子窜str2
        if ('/0' == *s2)
        {
            return ((char *)str1); //返回找到的位置
        }
        str1++; 
    }
    /* 查找不成功,返回NULL */
    return ((char *)0);
}

int main(int argc,char *argv[])
{

    char a[20]="Hello world!";
    char b[20]="world";
    char *c = "llohe";
    char *d;
    char *f;

    d = myStrstr(a,b);
    f = myStrstr(a,c);

    if (d)
        printf("%s/n", d);
    else
        printf("Not found!/n");

    if (f)
        printf("%s/n", f);
    else
        printf("Not found!/n");

    return 0;
}

你可能感兴趣的:(c,null,语言)