Pagini recente » Cod sursa (job #1315040) | Cod sursa (job #1857536) | Cod sursa (job #1617405) | Cod sursa (job #2615589) | Cod sursa (job #974024)
Cod sursa(job #974024)
#include<fstream>
#include<cstring>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
int n,m,urm[256],b[256];
char p[256],a[1001];
void urmatorul(char *p)
{
int k=-1,x;
urm[0]=0;
for(x=1;x<=m;x++)
{
while(k>0&&p[k+1]!=p[x])
k=urm[k];
if(p[k+1]==p[x])
k++;
urm[x]=k;
}
}
int main()
{
int i,x=-1,nr=0;
f.getline(p,256);
f.getline(a,1001);
n=strlen(a);
m=strlen(p);
urmatorul(p);
for(i=0;i<n;i++)
{
while(x>0&&p[x+1]!=a[i])
x=urm[x];
if(p[x+1]==a[i])
x++;
if(x==m-1)
{
nr++;
b[nr]=i-m+1;
x=urm[x];
}
}
g<<nr<<"\n";
for(i=1;i<=nr;i++)
g<<b[i]<<" ";
return 0;
}