C标准库函数实现之strstr

本文分享了一次面试经历,作者在面试中意识到自己在代码实现上的不足,特别是对strstr函数的理解和实现。文章详细分析了strstr函数的实现原理,并对比了不同实现方式。

昨天去参加一个面试,发现自己的代码水平还是不够,连基本的标准库实现,都没法做好,遂决定对标准库中的部分函数的实现研习一番。

面试的是 char* strstr( char* s1 , char* s2 )函数,自己写的就不说了,写得很烂,不过看了minix代码,里面的实现思路和我一样,Linux的代码中,对这个函数有用汇编来进行实现的,暴汗……

看下Linux下的实现:

char *strstr(const char *s1, const char *s2)
{
    size_t l1, l2; 

    l2 = strlen(s2);
    if (!l2)
        return (char *)s1;
    l1 = strlen(s1);
    while (l1 >= l2) 
   {
        l1--;
        if (!memcmp(s1, s2, l2))
            return (char *)s1;
        s1++;
    }
    return NULL;
}

思路:

  1. 检测字符串安全性,s2为空果断抛弃之。

  2. s1逐个递增,并与s2整串比较内存大小,判断字串是否相等。相等则返回s1,否则s1++,再执行比较。

  3. 最后返回空值,代表未找到相符的串

总的来说,这个函数的实现是相当简单的,昨天却没有将它完整答对,虽然思路正确了,但是coding能力不仅在于思路,更在于how to code fast and right。

路漫漫其修远兮,吾将上下而求索。

转载于:https://www.cnblogs.com/phoewang/archive/2011/11/01/2231400.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值