首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C 語言手寫 strstr:子串查找暴力匹配算法實現

     編輯:關於C

算法邏輯(暴力匹配)

  1. 外層遍歷主串 str1 每個起始位置 i;
  2. 內層從 i 開始比對模式串 str2;
  3. 若全匹配成功,返回 str1+i;
  4. 主串遍歷結束未找到,返回 NULL。

代碼實現(修正版)

#include <stdio.h>
#include <assert.h>

char *my_strstr(const char *str1, const char *str2) {
    assert(str1 && str2);
    if (*str2 == '\0') return (char*)str1; // 空模式串匹配開頭

    for (const char *p1 = str1; *p1; ++p1) {
        const char *s1 = p1;
        const char *s2 = str2;
        while (*s1 && *s2 && *s1 == *s2) {
            ++s1; ++s2;
        }
        if (*s2 == '\0') return (char*)p1; // 找到
    }
    return NULL;
}

int main() {
    char *s1 = "abbbcdef";
    char *s2 = "bbcd";
    char *res = my_strstr(s1, s2);
    printf("Found at: %s\n", res ? res : "NULL");
    return 0;
}

關鍵修正點

  • 原代碼變量名錯誤(s/q 未定義),已修正為 s1/s2;
  • 外層循環條件 *p1 而非 *p;
  • 空模式串處理:標準庫返回主串首地址。

複雜度與優化

  • 時間 O(n*m),n 主串長,m 模式串長;
  • 工程中長文本搜索請用 KMP (O(n+m)) 或 Boyer-Moore;
  • 本實現適合教學、短串、面試手寫場景。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved