谢顶的神秘粉丝 2022-02-04 20:13 采纳率: 100%
浏览 34
已结题

strstr代码模拟实现中的问题

img


这个while(*cp)循环里面的东西看不明白,最后是怎么把子集里的数打印出来的呀,返回去的不是CP地址么

  • 写回答

2条回答 默认 最新

  • 慕雪华年 C/C++领域新星创作者 2022-02-05 11:10
    关注

    strstr的作用是在字符串s1里面查找是否有字符串s2

    • 如果有,返回字符串s2在字符串s1里的起始地址
    • 如果没有,返回NULL

    image-20220125172632888

    模拟实现

    str函数的模拟实现相对来说比较复杂

    最重要的就是遇到多个字符相同而最后不同的情况

    • 需要用另外一个指针C来遍历字符串,找寻C和ptr2所指元素相等的第一个字符
    • 然后用ptr1来和ptr2比较,C保持不变
    • 如果匹配成功,返回C指针
    • 如果匹配失败,C++后赋值给ptr1,继续进行查找

    image-20220125181435767

    //5.strstr 判断str1里面有没有str2
    //如果有,返回str1里str2的起始地址
    //如果str1不包含str2,返回null
    char* my_strstr(const char* str1, const char* str2)
    {
        const char* s1 = str1;
        const char* s2 = str2;
        const char* cur = str1;
        assert(str1 && str2);
        if (*str2 == '\0')
        {
            return (char*)str1;
        }
        while (*cur)
        {
            s1 = cur;
            s2 = str2;
            while (*s1 && *s2 && *s1 == *s2)
            {
                s1++;
                s2++;
            }
            if (*s2 == '\0')
                return (char*)cur;
    
            cur++;
        }
        return NULL;
            
    }
    int main()
    {
        char arr1[15] = { "helloworld" };
        char arr2[] = { "owo" };
        char* p=strstr(arr1, arr2);
        if (p == NULL)
        {
            printf("找不到\n");
        }
        else
        {
            printf("%s\n", p);
        }
        return 0;
    }
    

    如果对你有帮助,还请点个采纳,万分感谢!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月13日
  • 已采纳回答 2月5日
  • 创建了问题 2月4日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)