用strstr函数 写一个字符串查找函数(用两种方法)

方法一:比较小白的写法

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

const char *strstr(const char *src, const char *sub)
{

    const char *b;
    const char *a;
    while (*src)
    {
        if (*src == *sub)
        {
            a = src;
            b = sub;
            while (*b)
            {
                a++;
                b++;
                if (!*b)
                {
                    return src;
                }
                if (*a != *b)
                {
                    src++;
                    break;
                }
            }
        }
        else
        {
            src++;
        }
    }

    return NULL;
}
int main(void)
{
    char bp[] = "kjfdhsgkjsdhgksdhgfiuuirewk";
    char sq[] = "uu";
    const char *r = strstr(bp,sq);
    printf("r:%s\n", r);
}

方法二:高级一点点的写法

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

const char *strstr(const char *src, const char *sub)
{
    const char *bp;
    const char *sp;
    if (!src || !sub)
    {
        return src;
    }
    /* 遍历src字符串  */
    while (*src)
    {
        /* 用来遍历子串 */
        bp = src;
        sp = sub;
        while ((*bp++ == *sp))
        {
            sp++;
        }
        //do
        if (!*sp) /*到了sub的结束位置,返回src位置   */
        {
            return src;
        }
        src++;
    }
    return NULL;
}
int main(void)
{
    char bp[] = "ajfdhjhss";
    char sq[] = "jh";
    const char *offset = strstr(bp, sq);
    if (offset != NULL)
    {
        printf("offset=%s\n", offset);
    }
    else
    {
        printf("not find\n");
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值