模拟实现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;
}
相关推荐
茉莉玫瑰花茶6 小时前
GO [ 方法 ]
开发语言·后端·golang
今晚打老虎7 小时前
c++之提高A(前缀和)(第三课)
数据结构·c++·算法
狗凯之家源码网7 小时前
微博图床 PHP 系统搭建与实战应用指南
android·开发语言·php
不会就选b8 小时前
算法日常・每日刷题--<贪心>26
数据结构·算法
乌暮8 小时前
深入理解 Java 泛型:把「万能盒子」用对、用稳
java·开发语言·后端·学习
2601_962218619 小时前
C语言中三种库的编译和使用方法
开发语言·c++
铅笔小新z9 小时前
【C语言】操作符
c语言
传奇开心果编程9 小时前
中庸、有容、破执:仓颉编程语言的中华智慧结晶——三重哲学境界思辨
开发语言·华为·开源·软件工程
jimy19 小时前
派生类重写基类虚函数(二):override的作用
开发语言·c++
_upupup9 小时前
异常(C++)
java·开发语言·jvm