日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

算法串匹配C++实现字符串匹配的KMP算法

發(fā)布時間:2025/5/22 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法串匹配C++实现字符串匹配的KMP算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

新手發(fā)帖,很多方面都是剛?cè)腴T,有錯誤的地方請大家見諒,迎歡批評指正

? ? ?之前看《算法導(dǎo)論》符字串匹配分部講到KMP算法,被弄得云里霧里。天今看到阮一峰寫了一篇博客《符字串匹配的KMP算法》:

????http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html

????講的淺顯易懂,便按照他的思緒用C++實現(xiàn)了一篇,代碼如下:

????

每日一道理
“上下五千年,龍的看火不滅;古有愚公志,而今從頭越…… ”站在新世紀的門檻上,我們的追求就是讓祖國燦爛的喜悅飛揚在美好的明天……
#include <iostream> #include <string> using namespace std;//盤算單次的分部匹配值,如str=="ABCDAB"時回返2 int single_match(string str) {int n=str.length();string *prefix=new string[n-1]();string *suffix=new string[n-1]();for(int i=0;i!=n-1;++i){for(int j=0;j<=i;++j)prefix[i]+=str[j];for(int k=i+1;k!=n;++k)suffix[i]+=str[k];}int match_num=0;for(int i=0;i<n-1;++i)for(int j=0;j<n-1;++j)if(prefix[i]==suffix[j])match_num+=prefix[i].length();return match_num; }//對全部符字串,盤算其分部匹配表 void partial_match_table(string str,int* table) {int n=str.length();for(int i=0;i!=n;++i){string sub_str;for(int j=0;j<=i;++j)sub_str+=str[j];int temp=single_match(sub_str); table[i]=temp;} }// KMP算法 int Knuth_Morris_Pratt(string str1,string str2,int *table) {int n1=str1.length();int n2=str2.length();int i=0;while(i<n1-n2){int j=0;while(j<n2){if(str1[i+j]==str2[j])++j;elsebreak;}if(j==n2)break;else if(j==0)++i;elsei+=j-table[j-1];}if(i>n1-n2)return -1;return i; }int main() {string str1("BBC ABCDAB ABCDABCDABDE");string str2("ABCDABD");int n=str2.length();int *table=new int[n];for(int i=0;i<n;++i)cout<<table[i]<<' ';cout<<endl;cout<<Knuth_Morris_Pratt(str1,str2,table)<<endl;return 0; }

????代碼的缺陷是對符字串的處置過太硬生。習慣了python對string類型的切片作操后,對C++中string類型的應(yīng)用太疏生,以至于掏出子串的作操都用歷遍相加來實現(xiàn)……

????迎歡大家提出修改意見哈~

文章結(jié)束給大家分享下程序員的一些笑話語錄: 聯(lián)想——對內(nèi)高價,補貼對外傾銷的偉大“民族”企業(yè)。

總結(jié)

以上是生活随笔為你收集整理的算法串匹配C++实现字符串匹配的KMP算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。