Pagini recente » Cod sursa (job #1733847) | Cod sursa (job #2722845) | Cod sursa (job #837481) | Cod sursa (job #1729336) | Cod sursa (job #1200813)
//Se dau 2 siruri. De cate ori apare sirul al doilea, rasturnat, in primul sir
#include <stdio.h>
#include <stdlib.h>
char sir [2000000],subsir[2000000];
int nraparitii[2000000];
FILE *f,*g;
int main ()
{
f = fopen("strmatch.in","r");
g = fopen("strmatch.out","w");
int k=0,i = 0,n1 = 0,j = 0,n2 = 0,x = 0;
while(fscanf(f,"%c",&subsir[j])==1)
{
if(subsir[j]=='\n')
break;
else
j++;
}
n2 = j;
while(fscanf(f,"%c",&sir[i])==1 )
{
if(sir[i] == '\n')
break;
i++;
}
n1 = i;
i = 0;
j = 0;
for(j = 0;j<=n2;j++)
{
for(i = 0;i <= n1;i++)
{
if(subsir[j]=='\n')//daca a gasit vreo potrivire pana la final
{
nraparitii[x]=i-n2;//pozitia in care sirul se potriveste peste subsir - lungimea sirului n2
k++;
x++;
i = i-2;//pentru a putea lua si ultima litera din solutia sa o verifice cu urmatoarele 2 sa vada daca mai avem o solutie
}
if(subsir[j]==sir[i])//daca se gaseste prima litera din subsir sa coincida cu vreuna din sir
j++;//trece la urmatoarea litere din subsir si la urmatoarea litera din sir
else j=0;//altfel se incepe din nou din subsir iar in sir se continua de une s-a ramas
}
break;
}
fprintf(g,"%d\n",k);
for(i = 0;i < x ;i++)
fprintf(g,"%d\t",nraparitii[i]);
fclose(f);
fclose(g);
return 0;
}