谢顶的神秘粉丝 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 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法