Pagini recente » Cod sursa (job #962684) | Cod sursa (job #1146656) | Cod sursa (job #183079) | Cod sursa (job #153985) | Cod sursa (job #2084328)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
char pattern[2000010], str[2000010];
int l[2000010], n, m, v[1005], x=0;
void citire()
{
ifstream fin ("strmatch.in");
fin.getline(pattern, 2000010);
fin.getline(str, 2000010);
}
void creare()
{
int i=1, j=0;
l[0]=0;
while(i<m)
if(pattern[i]==pattern[j])
{
l[i]=j+1;
i++,j++;
}
else if(j==0) l[i++]=0;
else j=l[j-1];
}
void parcurgere()
{
int i, j;
i=j=0;
while(i<n)
if(str[i]==pattern[j])
{
i++,j++;
if(j==m)
{
v[x++]=i-m;
j=l[j-1];
if (x==1000)
return;
}
}
else if(j==0)i++;
else j=l[j-1];
}
void afisare()
{
ofstream fout("strmatch.out");
fout << x << "\n";
for (int i=0; i<x; i++)
fout << v[i] << " ";
}
int main()
{
citire();
n=strlen(str);
m=strlen(pattern);
creare();
parcurgere();
afisare();
return 0;
}