用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;
//}


 

相关推荐

  1. C#中调用C++函数返回const char*类型

    2023-12-27 14:04:02       51 阅读
  2. C语言一个扫雷小游戏

    2023-12-27 14:04:02       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-27 14:04:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-27 14:04:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-27 14:04:02       82 阅读
  4. Python语言-面向对象

    2023-12-27 14:04:02       91 阅读

热门阅读

  1. 结合el-upload修改支持上传图片、视频并预览

    2023-12-27 14:04:02       67 阅读
  2. Node.js中处理特殊字符的文件名,安全稳妥的方案

    2023-12-27 14:04:02       61 阅读
  3. 腾讯云国外服务器价格表免费公网IP地址

    2023-12-27 14:04:02       70 阅读
  4. MySQL5.7服务器状态变量参考

    2023-12-27 14:04:02       61 阅读
  5. ASP.NET Core认证原理和实现

    2023-12-27 14:04:02       53 阅读
  6. LLaMA-2 下载&demo使用

    2023-12-27 14:04:02       54 阅读
  7. 【数字IC设计】Verilog计算x/255的商和余数

    2023-12-27 14:04:02       66 阅读
  8. 微信小程序实现一个电影信息查询的应用程序

    2023-12-27 14:04:02       56 阅读