Pagini recente » Cod sursa (job #2038947) | Rating petrea andrei (o_dai_cu_ady_papushika) | Rating Ioan Neagu (Neagu_Ioan) | Cod sursa (job #2100894) | Cod sursa (job #1854298)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
void build_pi(int pi[100000], char sir[100000], char text[100000], int &c, int v_poz[100000])
{
int k=0;
for(int i=0; i<strlen(sir); i++)
{
if(sir[i]!=text[k])
{
k=0;
pi[i]=k;
}
if(sir[i]==text[k])
{
k++;
if(k==strlen(text))
{
pi[i]=k;
if(sir[i]==text[0])
k=1;
}
else pi[i]=k;
}
if(pi[i]==strlen(text))
{
c++;
v_poz[c]=i-strlen(text)+1;
}
}
}
int main()
{
char text[100000], sir[100000];
int pi[100000], c=0, v_poz[100000];
f>>text>>sir;
build_pi(pi, sir, text, c, v_poz);
/*for(int i=0; i<strlen(sir); i++)
cout<<pi[i]<<" ";*/
g<<c<<endl;
for(int i=1; i<=c; i++)
g<<v_poz[i]<<" ";
}