#include"iostream"
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define maxSize 20
using namespace std;
typedef struct Str{
int len;
char *c;
}Str;
void get_next(Str sub,int next[]){
int i=1;
int j=0;
while(i<sub.len){
if(j==0||sub.c[i]==sub.c[j]){
++i;
++j;
next[i]=j;
}
else{
j=next[j];
}
}
}
int get_pos(Str s,Str sub,int next[]){
int i=1;
int j=1;
while(i<=s.len&&j<=sub.len){
if(j==0||s.c[i]==sub.c[j]){
++i;
++j;
}
else{
j=next[j];
}
}
if(j>sub.len){
return i-sub.len;
}
else return -1;
}
int main(){
int next[maxSize];
Str s;
Str sub;
s.len=sub.len=0;
char c1[]={'A','B','A','B','C','A','B','C','A','C','B','A','B'};
char c2[]={'A','B','C','A','C'};
s.len=sizeof(c1);
sub.len=sizeof(c2);
s.c=(char *)malloc(sizeof(c1)+2);
sub.c=(char *)malloc(sizeof(c2)+2);
for(int i=1;i<=s.len;i++){
s.c[i]=c1[i-1];
}
for(int i=1;i<=sub.len;i++){
sub.c[i]=c2[i-1];
}
get_next(sub,next);
int pos=get_pos(s,sub,next);
cout<<pos;
return 0;
}
运行结果为6