U盘没了只好当云盘了 哈哈
三个KMP模板先存两个
///返回个数 #include<iostream> #include<stdio.h> #include<string.h> using namespace std; char t[10000],name[1000]; int next1[50005]; void getnext1(char *s)//把副串弄进来,next1 { int i=0,j=-1; next1[0]=-1; int len=strlen(s); while(i<len) { if(s[i]==s[j]||j==-1) { i++; j++; next1[i]=j; } else j=next1[j]; } } int kmp(char *s,char *t) //注意:s串为副串,t串为主串 { int num=0,i=0,j=0; int len=strlen(s); int lenn=strlen(t); while(i<lenn) { if(j==-1||s[j]==t[i]) { i++; j++; } else j=next1[j]; if(j==len){ j=0; num++; } } return num; }
///返回位置 #include<iostream> #include<stdio.h> #include<string.h> using namespace std; char s[50][100]; char t[10000],name[1000]; int next1[50005]; void getnext1(char s[])//把副串弄进来,next1 { int i=0,j=-1; next1[0]=-1; int len=strlen(s); while(i<len) { if(s[i]==s[j]||j==-1) { i++; j++; next1[i]=j; } else j=next1[j]; } } int kmp(char s[],char t[]) //注意:s串为副串,t串为主串 { int num=0,i=0,j=0; int len=strlen(s); int lenn=strlen(t); while(i<lenn&&j<len) { if(j==-1||s[j]==t[i]) { i++; j++; } else j=next1[j]; } //printf("%d %d ",i,j); if(j==len) return i-j; else return 100000; }