Cod sursa(job #1854312)
Utilizator | Data | 22 ianuarie 2017 16:21:02 | |
---|---|---|---|
Problema | Potrivirea sirurilor | Scor | 14 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.28 kb |
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
void build_pi(int pi[1001], char sir[1001], char text[1001], int &c, int v_poz[1001])
{
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[1001], sir[1001];
int pi[1001], c=0, v_poz[1001];
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]<<" ";
}