strstr函数

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>

int main() {
    char arr1[20] = "abcdefgabcdefg";
    char arr2[20] = "cdef";
    int *ret=strstr(arr1, arr2);
    if (ret == NULL) {
        printf("找不到子串\n");
    }
    else {
        printf("%s\n",ret);
    }
        return 0;
}

结果为:->cdefgabcdefg

strstr函数的功能就是查找一个字符串是否在另一个字符串当中。

以上这个代码arr2中cdef在arr1这个字符串中所以在目的的字符串中 所以会打印第一次出现这个子串以及后面的字母

模拟实现strstr函数

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>

char* my_strstr(const char* str1,const char* str2) {  //直接使用const修饰因为不修改它的内容
    assert(str1 && str2);//对指针进行断言操作,确保指针的有效性
    const char* s1 = str1; //定义一个char*类型的指针指向str1首地址
    const char* s2 = str2; //定义一个char*类型的指针指向str2首地址
    const char* cur = str1; //定义一个char*类型的指针指向str1首地址
    while (*cur) { //当cur不为\0的时候就进入循环
        s1 = cur;//寻找的过程中s1和s2都会变化 所以如果没走到最后就把cur的值给到s1 从下一个字符开始寻找
        s2 = str2;//把str2的首地址传给s2,让s2从开头寻找
        while (*s1 && *s2 && *s1 == *s2) {  //当*s1和*s2不为\0并且*s1等于*s2时进入循环
            s1++; //让s1和s2++ 判断每个字符是否相等
            s2++;
        }
        if (*s2 == '\0') {  //如果走到了最后 也就是*s2为\0时 证明s2中的字符全部与s1的子串相同了(也就是s1中含有或等同s2中的字符了)
            return (char*) cur;//直接返回初始的cur的地址
        }
        cur++;//如果没有走到最后 就认定在cur中找不到,则cur++在下一个字符中寻找
    }
    return NULL;//找不到
}


int main() {
    char arr1[20] = "abcdewgabcdefg";
    char arr2[20] = "cdef";
    int *ret=my_strstr(arr1, arr2);
    if (ret == NULL) {
        printf("找不到子串\n");
    }
    else {
        printf("%s\n",ret);
    }
        return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值