模拟实现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;
}
相关推荐
liliangcsdn1 小时前
因子权重矩阵处理-滞回缓冲带+降频稳定化动态重选
开发语言·python·算法
ShuiShenHuoLe1 小时前
golang-jwt v5 入门
开发语言·后端·golang
泡泡鱼(敲代码中)1 小时前
Python语法技术学习笔记
开发语言·笔记·python·学习·pycharm
敲代码的嘎仔1 小时前
自己设计了一个兑换码算法:自增ID + Base32转码 + 按位加权签名 + 异或混淆,面试被追问细节时终于不用慌了
java·数据库·mysql·算法·微服务·面试·职场和发展
hqyjzsb2 小时前
Python 技术人转型 AI:CAIE Level I、Level II 对比怎么选
开发语言·人工智能·python·金融·数据挖掘·数据分析·aigc
云析赢指标公式网42 小时前
文华WH6布林轨道均线强弱共振指标公式
前端·算法
承渊政道3 小时前
【Python编程—从入门到实践】(Python字典:从基础语义到现代工程实践)
开发语言·python·pycharm·字典·嵌套
多弗朗皮卡丘3 小时前
数据结构4:链表(下)
c语言·数据结构·链表
luj_17683 小时前
一线一区一变破解人盯人防守密码
开发语言·网络·c++·经验分享·算法