模拟实现strstr

strstr也是在字符串函数中比较常见的一个简单函数,其功能是查找一个字符串是不是另一个字符串的子串,我们可以也尝试模拟实现strstr。

首先知道strstr的函数类型和参数

char *strstr( const char *str1, const char *str2 );

下来需要实现:

1.检测字符串的安全性,即是否为空。
2.str1的字符逐个递增,并与str2整串进行比较判断是否相等。相等返回str1;不相等str1++,继续进行比较。
3.如果最后没有找到,返回空值。

代码如下:

char* my_strstr(const char* str1, const char* str2)
{
    assert(str1);
    assert(str2);
    char* cp = (char*)str1;
    char* substr = (char*)str2;

    if (*substr == '\0')
        return NULL; //str2为空时,返回空值。
    while (*cp)
    {
        char* s1 = cp; //s1为每次和str2比较时的指针
        (char*)substr = (char*)str2;//每次在str1查找完str2需要指向首地址
        while (*s1 && *substr && (*s1 == *substr))
        //三种情况退出循环
        //1.str1遍历完 2.str2遍历完 3.str1和str2不相等
        //当目前str1和str2相等时进入循环
        {
            s1++; //目前str1的位置指向下一位
            substr++; //目前str2的位置指向下一位
        }
        if (*substr == '\0')
            return cp; //当str2可以遍历到最后,证明是str1的子串,返回在str1的首地址
        cp++;
    }
    return NULL; 
    //当cp指向‘\0’,str1的所有字符被查找之后来到此处,证明没有找到,返回NULL
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值