用C语言写出一个模拟实现strstr函数的代码,返回类型为char*

//模拟实现strstr
(字符中的元素是连续存放的,所以不会存在跳动存放的情况,例如a1="ababcd",a2="ac"此结果就是NULL)
情况1.arr1="abcd"arr2="abc"(一次匹配就找到了)
情况2.arr1="ababcd"arr2="abc"(多次匹配才能找到)
//#include <stdio.h>
//#include <string.h>
//#include<assert.h>
//char* my_strstr(char* str1, const char* str2)
//{
//    assert(str1 && str2);//断言是为了保证两个指针有意义
//    //设置s1,s2的原因是为了防止改动str1或str2会影响查找时位置的变动,因此提前保存或创建一份
//    const char* s1 = str1;
//    const char* s2 = str2;
//    const char* p = str1;
//    while (*p)
//    {
//        s1 = p;//为了让s1随p的变动而变动(是为了情况2发生时直接跳过多余操作)
//        s2 = str2;
//        while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
//        //*s1 == *s2是为了说明此位置的字符相等,然后经过各自的自增去查找后面的是否相等
//        //*s1 != '\0' && *s2 != '\0'是为了说明,找子字符串时都找到末尾了,只能是找到或没找到
//        {
//            s1++;
//            s2++;
//        }
//        if (*s2 == '\0')//*s2 == '\0'是为了说明s2已经全部找到才会等于\0,因此返回p(子字符串所在字符串的第一个字符的位置)
//        {
//            return p;
//        }
//        p++;//当判断此处的情况同于情况2时,就直接进行下一位的匹配,跳过多于步骤
//    }
//    return NULL;//此处返回的值均为ret的值
//}
//int main()
//{
//    char str[] = "This is a simple string";
//    char* pch= "simple";
//    char* ret = my_strstr(str,pch);//此处的ret的类型char*时声明函数的返回类型,应保持一致
//    if (ret == NULL)
//    {
//        printf("子字符串不存在于字符串中\n");
//    }
//    else
//    {
//        printf("子字符串不存在于字符串中,为:%s\n",ret);
//    }
//    return 0;
//}


 

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值