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

C語言字串查找演算法:暴力比對與改進實作

     編輯:關於C語言

基本暴力比對法 (Brute Force)

主串 S 長度 n,模式串 T 長度 m。逐位比對,失敗時主串回溯到下一起始位置,模式串回到開頭。

程式碼架構

bool search_str(char *s, char *t) {
    int i = 0, j = 0;
    while (s[i] && t[j]) {
        if (s[i] == t[j]) { i++; j++; }
        else { i = i - j + 1; j = 0; }
    }
    return t[j] == '\0';  // 完整匹配
}

原始碼分析 (教學版)

提供的程式碼包含:

  • searchstr:遞迴/迭代查找主體
  • cmpstr:子字串比對輔助函數
  • chazhao:封裝介面,印出發現位置

使用 iostream.h 舊式標頭、void main() 非標準寫法,建議現代化:

#include <stdio.h>
#include <string.h>
#include <stdbool.h>

bool find_substr(const char *haystack, const char *needle) {
    size_t n = strlen(haystack), m = strlen(needle);
    for (size_t i = 0; i <= n - m; i++)
        if (strncmp(haystack + i, needle, m) == 0)
            return true;
    return false;
}

進階演算法延伸

演算法時間複雜度特點
KMPO(n+m)預處理 next 陣列避免回溯
Boyer-MooreO(n/m) 最佳從右向左比對、壞字符/好後綴規則
SundayO(n) 平均BM 改良、看主串下一字符決定跳躍
Rabin-KarpO(n+m) 平均滾動雜湊、適合多模式匹配

教學階段掌握暴力法邏輯,工程專案建議使用標準庫 strstr 或成熟演算法實作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved