Pagini recente » Cod sursa (job #553297) | Cod sursa (job #1895380) | Cod sursa (job #747290) | Cod sursa (job #328734) | Cod sursa (job #795221)
Cod sursa(job #795221)
#include <cstdio >
#include <string.h>
int v[1005],cont;
int cautare(char *s,int n ,char *p,int m)
{
int i,j,k,d[256];
for ( i=0 ; i < 256 ; i ++)
d[i]=m;
for ( j=0 ; j < m-1 ; j++)
d[p[j]]=m-j-1;
i=j=m;
while (i<=n)
{
j=m;
k=i;
while(j>0 && ( s[k-1]==p[j-1] ) )
{
k--;
j--;
}
if(j>0)
i=i+d[s[k-1]];
if(j<=0)
{
if(cont<=1000)
{
v[cont++]=i-m;
i=i+d[p[m-1]];
}
else
return 0;
}
}
return j==0 ? i-m : -1;
}
int main()
{
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
char s[100],p[100];
int m,n;
scanf("%s%s",p,s);
n=strlen(s);
m=strlen(p);
cautare(s,n,p,m);
printf("%d\n",cont);
for(int i=0 ; i < cont ; i ++)
printf("%d ",v[i]);
}