⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 boyer-moore-hospool.txt

📁 匹配算法
💻 TXT
字号:
Boyer-Moore-Hospool匹配算法

这个算法在大文件中搜索小pattern有很高效率。 
推荐用来代替strstr(); 
这个实现我没有测过,不过应该不会有大问题。 
C++的代码,容易使用:) 
------------------------------------------------- 
    #include <string.h> 
    #include <assert.h> 
    #include <stdio.h> 

    class Search { 
          static const int MAXCHAR = 256; 
          int d[MAXCHAR]; 
          int m; 
          char* patt; 
    public: 
          Search(char*); 
          int find(char*); 
    }; 

    Search::Search(char* p) 
    { 
          assert(p); 

          patt = p; 
          m = strlen(patt); 

          int k = 0; 

          for (k = 0; k < MAXCHAR; k++) 
                d[k] = m; 

          for (k = 0; k < m - 1; k++) 
                d[patt[k]] = m - k - 1; 
    } 

    int Search::find(char* text) 
    { 
          assert(text); 

          int n = strlen(text); 
          if (m > n) 
                return -1; 

          int k = m - 1; 

          while (k < n) { 
                int j = m - 1; 
                int i = k; 
                while (j >= 0 && text == patt[j]) { 
                    j--; 
                    i--; 
                } 
                if (j == -1) 
                    return i + 1; 
                k += d[text[k]]; 
          } 

          return -1; 
    } 

    #ifdef DRIVER 
    int main(int argc, char* argv[]) 
    { 
          assert(argc == 3); 

          const int MAXLINE = 256; 
          char fbuf[MAXLINE]; 
          Search patt(argv[1]); 
          FILE* fp = fopen(argv[2], "r"); 
          assert(fp); 
          int nf = 0; 

          while (fgets(fbuf, MAXLINE, fp) != NULL) { 
                if (patt.find(fbuf) != -1) { 
                    fputs(fbuf, stdout); 
                    nf++; 
                } 
          } 

          fclose(fp); 

          return !nf; 
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -