Pagini recente » Cod sursa (job #2797364) | Cod sursa (job #2180249) | Cod sursa (job #1627095) | Cod sursa (job #2685545) | Cod sursa (job #133418)
Cod sursa(job #133418)
//knuth-morris-pratt
#include<stdio.h>
#include<string.h>
FILE*fin=fopen("kmp.in","r");
FILE*fout=fopen("kmp.out","w");
char s[100],t[100];
int sup[100],n,m;
void prefix()
{
int k=0,i;
sup[1]=0;
for(i=2;i<=m;i++)
{
while(k>0&&s[k]!=s[i-1]) k=sup[k];
if(s[k]==s[i-1]) k++;
sup[i]=k;
}
}
void kmp()
{
int k=0,i;
for(i=1;i<=n;i++)
{
while(k>0&&t[i-1]!=s[k]) k=sup[k];
if(t[i-1]==s[k]) k++;
if(k==m){fprintf(fout,"potrivire de la %d\n",i-m+1);k=sup[k];}
}
}
int main()
{
fscanf(fin,"%s",&s);
fscanf(fin,"%s",&t);
fclose(fin);
n=strlen(t);
m=strlen(s);
prefix();
kmp();
fclose(fout);
return 0;
}