Pagini recente » Cod sursa (job #2543334) | Cod sursa (job #3213333) | Cod sursa (job #10375) | Cod sursa (job #3228788) | Cod sursa (job #856786)
Cod sursa(job #856786)
#define Nm 2000005
#include <stdio.h>
#include <string.h>
#include <iostream>
int D[256];
char To[Nm],P[Nm],*T;
int Tl,Pl;
int cont;
int v[1005];
void initialize_Lenght()
{
Tl=strlen((char*)To);
Pl=strlen((char*)P);
T=To;
}
void compute_D()
{
for(int i=0;i<256;i++)
D[i]=Pl;
for(int i=0;i<Pl;i++)
D[P[i]]=Pl-i;
}
void Boyer_Moore()
{
int i;
while ( Tl>=Pl )
{
for(i=Pl-1;T[i]==P[i]&&i>=0;i--)
if(i==0)
{
if(cont<1000)
v[cont]=(T-To);
cont++;
}
Tl -= D[T[i+1]];
T += D[T[i+1]];
}
}
int main()
{
FILE *f=fopen("strmatch.in","r");
FILE *g=fopen("strmatch.out","w");
fscanf(f,"%s %s",P,To);
initialize_Lenght();
compute_D();
Boyer_Moore();
fprintf(g,"%d\n",cont);
for(int i=0;i<cont;i++)
{
if(i==1000)
i=cont+10;
else
fprintf(g,"%d ",v[i]);
}
}