/* 计算字符串中子串出现的次数。 算法:字符串最长匹配原则,以下是图解: abcabcabc abc 循环遍历母串前lenT-lenP; 循环遍历字串,用j指向子串,用k记录每一趟母串开始的位置,若p[j]==t[k]则k、j均后移 若j==子串长度lenP,则找到一个子串,次数++。 */ #include<stdio.h> #include<math.h> #include<malloc.h> #include<string.h> main() { char T[100],P[100]; gets(T); gets(P); int i,j,k,c=0,lenT,lenP; lenT=strlen(T); lenP=strlen(P); for(i=0;i<=lenT-lenP;i++){ for(j=0,k=i;j<lenP&&P[j]==T[k];k++,j++); if(j==lenP) c++; } printf("%d ",c); }