Pagini recente » Cod sursa (job #1545618) | Cod sursa (job #2369996) | Cod sursa (job #6783) | Cod sursa (job #1982689) | Cod sursa (job #2201392)
#include <stdio.h>
int n,t[2000002],poz[1001];
char text[2000002],pat[2000002];
int main()
{
int i,j,s;
FILE *f,*g;
f=fopen("strmatch.in","r");
g=fopen("strmatch.out","w");
fscanf(f,"%s%s2",pat,text);
t[0]=-1;;
for(i=1;pat[i]!='\0';i++)
{
j=t[i-1];
while(j!=-1)
{
if(pat[j+1]==pat[i])
break;
j=t[j];
}
if(pat[j+1]==pat[i])
t[i]=j+1;
else
t[i]=-1;
}
n=0;s=-1;
for(j=0;text[j]!='\0';j++)
{
while(s!=-1)
{
if(text[j]==pat[s+1])
break;
s=t[s];
}
if(text[j]==pat[s+1])
s++;
if(s==i-1)
{
n++;
if(n<=1000)
poz[n]=j-i+1;
}
}
fprintf(g,"%d\n",n);
for(j=1;j<=n && j<=1000;j++)
fprintf(g,"%d ",poz[j]);
fclose(f);
fclose(g);
}