strstr函数的模拟实现,以及思路分享

8.26日

                        

        首先,我们来观察strstr函数的声明定义,它是一个char*类型的函数,所以可以返回数组的地址,其次它里面的参数都是const char*类型,这表示了这两数组是不可以被修改的。

        此函数的作用是在第一个数组string中,找出strChaSet数组所出现的位置,并且返回出现位置的坐标,否则返回NULL。

        在我们了解完strstr()函数的定义后,接下来我们来自己实现一个自己的my_strstr()函数吧!

        下面代码中,while循环里,可以看到,我每循环一次就重新将arr3=arr1,这样做的目的是让arr3来存放arr1地址也就是我们找到,出现的位置,最后返回他。

        在第二个while循环里,得确保arr1和arr2的值相等。或者arr2='\0',如果漏掉了这个条件,则程序在arr='\0'的时候就会停止,不会返回出现的地址。

        由于我们要返回的arr3是const char*类型,不允许修改或返回,我们只好将它强制转换成char*类型返回。

        最后我为什么要arr2=s2呢,因为如果出现s1中只出现s2中的前几个元素,并不满足全等条件,则我们要重新赋值,继续后面的判断。

char* my_strstr(const char* s1,const char* s2){
    const char* arr1 = s1;
    const char* arr2 = s2;
    const char* arr3;
    
    while(*arr1!='\0'){
        arr3=arr1;
            while(*arr1==*arr2 || *arr2 == '\0'){
            if(*arr2=='\0'){
                return (char*)arr3;
            }
                arr1++;
                arr2++;
            }
        arr1++;
        arr2 = s2;
    }
    return NULL;
}

int main()
{
   //strcmp
    char arr1[]={"abcffgh"};
    char arr2[]={"cf"};
    
    printf("%s",my_strstr(arr1,arr2));

        return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值