给出两个串,求出第一个在第二个中出现的次数
#include <stdio.h> #include <string.h> void preKmp(char *src, int m, int *rule){ int i=0,j=-1; rule[0]=j; while(i<m){ while(j!=-1 && src[j] != src[i]) j=rule[j]; i++,j++; if(j>=m) rule[i]=rule[j-1]; else rule[i]=j; } } int recount=0; void kmp(char *src, int m, char *dest, int n) { int rule[10005]; preKmp(src,m,rule); int i=0, j=0; while(i<n){ while(j!=-1 && src[j] != dest[i]){ j = rule[j]; } i++,j++; if(j==m){ //printf("%d\n",i-m);//匹配的位置 recount++; j=rule[j]; } } } char Reg[10005],ori[1000005]; int main() { int t; //freopen("E:\\input.txt","r",stdin); scanf("%d",&t); while (t--) { recount=0; scanf("%s%s",&Reg,&ori);//找出reg在ori中出现的次数 kmp(Reg,strlen(Reg),ori,strlen(ori)); printf("%d\n",recount); } return 0; }