1.描述:指针i不回溯的字符串模式匹配算法
#include <iostream> #include<cstring> using namespace std; /** 名称:计算next数组函数 描述:用于计算KMP模式匹配算法的next数组。该方法已得到修正,可以避免连续相同元素的问题 编写人:李一帆 时间:2021.2.3 参数:patternString 模式串 参数:nextArray next数组 返回值:null **/ void getNextArray(char* patternString,int* nextArray){ int i=0; int j=-1; nextArray[0]=-1; while(i<strlen(patternString)){ if(j==-1||patternString[i]==patternString[j]){ i++; j++; if(patternString[i]!=patternString[j]) nextArray[i]=j; else nextArray[i] = nextArray[j]; }else{ j= nextArray[j]; } } } /** 名称:KMP模式匹配 描述:用于字符串的模式匹配问题 编写人:李一帆 时间:2021.2.3 参数:mainString 主串 参数:patternString 模式串 参数:nextArray next数组 返回值:int -1:不匹配;其余:子模式的首下标 **/ int patternMathcingKMP(char* mainString,char* patternString,int* nextArray){ int i = 0; int j = 0; while(i<strlen(mainString)&&j<strlen(patternString)){ if(j==-1||mainString[i]==patternString[j]){ i++;j++; }else{ j = nextArray[j]; } } if(j==strlen(patternString)){ return i - j; }else{ return -1; } } int main() { char* mainString = "ababcabcacbab"; char* patternString = "abcac"; int* nextArray =new int[100]; getNextArray(patternString,nextArray); int pos = patternMathcingKMP(mainString,patternString,nextArray); cout<<pos; return 0; }