模拟实现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;
}
相关推荐
阿里嘎多学长8 小时前
2026-10-20 GitHub 热点项目精选
开发语言·程序员·github·代码托管
布吉岛的石头9 小时前
Java 程序员第 50 阶段2:预训练的目标函数:自回归语言建模本质
java·开发语言·人工智能·深度学习·回归·transformer
小羊没烦恼!9 小时前
铁道部新客票系统设计(二)
开发语言·前端·数据库·python·oracle·c#·php
quantdash_cc10 小时前
从实时行情到价格观察表:用 Python 和 Pandas 构建策略输入数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
昂好的day11 小时前
VisionMaster 通信模块实战(上):Modbus、TCP 收发、协议组装解析
开发语言·网络·网络协议·tcp/ip·c#
罗湖老棍子11 小时前
【例 1】Sightseeing Trip(信息学奥赛一本通- P1494)(洛谷-P10927)
数据结构·算法·图论·最短路·floyd·最小环
努力实干12 小时前
面向对象设计原则——C++
开发语言·c++·数码相机
NetX行者13 小时前
四语言 Hello World 背后:编译模型与运行时对比
开发语言
stsdddd13 小时前
YOLO算法建筑工地安全帽目标检测数据集16881张:标注核对笔记
算法·yolo·目标检测
CV爱数码14 小时前
论文精读|Learned Primal-Dual:把原始–对偶算法展开成网络
图像处理·算法·计算机视觉·ct·重建·断层扫描