模拟实现strstr函数(C语言)

C 字符串查找 - strstr()

描述

C 库函数 char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0'。

声明

下面是 strstr() 函数的声明。

c 复制代码
char *strstr(const char *haystack, const char *needle)

参数

  • haystack -- 要被检索的 C 字符串。
  • needle -- 在 haystack 字符串内要搜索的小字符串。
  • haystack 干草堆
  • needle 针
    来源推导: 干草堆里捞针/大海

返回值

该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。

cpp 复制代码
#include <stdio.h>

char *my_strstr(const char *str1, const char *str2) {
    // 防御性检查(增强健壮性)
    if (str1 == NULL || str2 == NULL) return NULL;
    
    // 如果 str2 是空串,返回 str1
    if (!*str2) return (char *)str1;

    char *cp = (char *)str1;  // 临时指针,遍历起点
    char *s1, *s2;

    while (*cp) {
        s1 = cp;
        s2 = (char *)str2;

        // 逐字符比较(这里的写法改成了直观的 ==)
        while (*s1 && *s2 && (*s1 == *s2)) {
            s1++;
            s2++;
        }

        // 如果 s2 走到了末尾,说明完全匹配
        if (!*s2) return cp;

        cp++; // 起点后移一位,继续尝试
    }
    return NULL; // 没找到
}

int main() {
    char *p1 = "abcddefdef";
    char *p2 = "def";
    char *ret = my_strstr(p1, p2);
    if (ret == NULL)
        printf("子串不存在\n");
    else
        printf("%s\n", ret);  // 输出 "defdef"
    return 0;
}
相关推荐
非优秀程序员2 小时前
第05章 播放器大战,暴风、快播与那一夜|《互联网产品恩仇录》
算法
沐晓时光3 小时前
C语言入门,内存函数知识讲解
c语言·开发语言
Zwawa7 小时前
C语言函数指针与宏实战:从回调、表驱动菜单到X-Macro,讲透嵌入式代码解耦
c语言·单片机·嵌入式
武子康9 小时前
驾驶轨迹换个坐标,就能给移动机器人用吗?
人工智能·算法·机器学习
David猪大卫9 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
HPtiger9 小时前
C++ 入门笔记:从 C 到 C++ 的核心过渡(命名空间、输入输出、缺省参数、重载、引用、内联)
c语言·c++·学习
fengci.11 小时前
CTF2MISC中等部分
开发语言·前端·学习
xys_67812 小时前
JavaEE通关手册:初识Java
java·开发语言
安妮细水长流13 小时前
ad7124
c语言·单片机