Pagini recente » Cod sursa (job #1809476) | Cod sursa (job #3153728) | Cod sursa (job #2039762) | Cod sursa (job #620280) | Cod sursa (job #586493)
Cod sursa(job #586493)
#include <stdio.h>
#include <string.h>
void prefix (int m, int l[], char P[])
{int q,k;
l[0]=0;
for (q=1;q<m;q++)
{ k=l[q-1];
while (k>0 && P[k]!=P[q])
k=l[k];
if (P[k]==P[q])
k=k+1;
l[q]=k;
}
}
void kmp (int n,int m, char T[],char P[])
{int k,t,l[2000001];
k=0;
prefix(m,l,P);
int contor=0;
for (t=0;t<n;t++)
{
while (k>0 &&P[k]!=T[t])
k=l[k];
if (P[k]==T[t])
k=k+1;
if (k==m&&contor<1000) {
printf ("deplasamentul %d e corect\n",t+1-m);
k=l[k-1];
contor++;}
}
}
int main()
{ freopen ("strmatch.in","r",stdin);
freopen ("strmatch.out","w",stdout);
int n,m;
char T[2000001],P[2000001];
gets(T);
gets(P);
n=strlen(T);
m=strlen(P);
kmp(n,m,T,P);
return 0;
}