Pagini recente » Borderou de evaluare (job #308052) | Borderou de evaluare (job #1293906) | Cod sursa (job #598999) | Borderou de evaluare (job #2726677) | Cod sursa (job #1200627)
//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;
char *p;
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 = n1-1;i >= 0;i--)
{
if(subsir[j]=='\n')//daca a gasit vreo potrivire pana la final
{
nraparitii[x]=i+1;//pozitia in care sirul se potriveste peste subsir
k++;
x++;
}
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;
}