Pagini recente » Cod sursa (job #265098) | Cod sursa (job #716107) | Cod sursa (job #1311051) | Cod sursa (job #1982399) | Cod sursa (job #867921)
Cod sursa(job #867921)
#include<stdio.h>
#include<string.h>
#include<vector>
#include<math.h>
using namespace std;
FILE*in=fopen("strmatch.in","r");
FILE*out=fopen("strmatch.out","w");
int constant,compare,pozitie,numar,contor_afisat;
char citit;
vector<int> a,b,contor_afisa;
int main()
{
while(true)
{
fscanf(in,"%c",&citit);
a.push_back(citit);
if(citit=='\n')
break;
compare*=7;
compare+=(int)citit;
compare%=53;
}
while(true)
{
fscanf(in,"%c",&citit);
if(citit=='\n')
break;
b.push_back(citit);
}
numar=(int)a.size()-1;
for(int i=0;i<numar;++i)
{
constant*=7;
constant+=(int)b[pozitie++];
constant%=53;
}
for(int i=numar;i<(int)b.size();++i)
{
if(compare==constant)
{
int contor=0;
bool print=true;
for(int j=i-numar;j<i;j++)
{
if(b[j]==a[contor])
contor++;
else
{print=false; break;}
}
if(print)
{
contor_afisat++;
contor_afisa.push_back(i-numar);
}
}
int hareza=pow(7,numar-1)*b[i-numar];
hareza%=53;
constant-=hareza;
constant+=53;
//constant%=53;
constant*=7;
//constant%=53;
constant+=b[i];
constant%=53;
}
fprintf(out,"%d\n",contor_afisat);
for(int i=0;i<contor_afisa.size();++i)
fprintf(out,"%d ",contor_afisa[i]);
printf("%d",'Z');
fclose(in);
fclose(out);
}