int next[MAXN]; char moshi[MAXN]; char mubiao[MAXN]; int num;//目标串中模式串的个数 void KMP(){ next[0]=-1; for(int j=0,k=-1;j<strlen(moshi)-1;){ if(k==-1||moshi[j]==moshi[k]){ next[++j]=++k; } else{ k=next[k]; } } for(int i=0,j=0;i<strlen(mubiao);){ if(j==-1||mubiao[i]==moshi[j]){ i++; j++; } else{ j=next[j]; } if(j==strlen(moshi)){ num++; i--; j=next[j-1]; } } }