Pagini recente » Cod sursa (job #2139467) | Cod sursa (job #763692) | Cod sursa (job #1613562) | Cod sursa (job #1140165) | Cod sursa (job #1201296)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
FILE *f,*g;
char sir[2000003],subsir[2000003];
int pozitii[10001];
int main()
{
f=fopen("strmatch.in","r");
g=fopen("strmatch.out","w");
int i,j,n1,n2,k;
i = 0; j = 0; n1 = 0; n2 = 0; ; k = 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;
else i++;
}
n1 = i;
j = 0;
for( i = 0 ;i <= n1 ;)
{
if(sir[i] == subsir[j])
{
i++;
j++;
}
else //daca 2 elementel nu se potrivesc in sir se trece la pozitia urmatoare iar subsirul porneste de la inceput
{
i++;
j = 0;
}
if(subsir[j] == '\n')//daca s-a gasit o slutie , subsirul porneste de la inceput iar sirul creste in continuare
{
if(k<1000)
pozitii[k] = i-n2;
k++;
if (j>=2)
i = i - n2;
else
i = i - 1;
}
}
/*
j = 0;
for(i = 0 ; i <=n1 ;i++)
{
for(j; j <= n2 ; j++)
{
if(subsir[j]== '\n')
{
pozitii[k] = i-n2;
k++;
if(n2 >= 2)
i -=2;//pt ca i-ul crese odata inainte sa ajunga aici si mai creste odata dupa ce face break
else i -=1;
j = 0;
break;
}
if(sir[i]==subsir[j])
{
j++;
break;
}
else
{
j = 0;//subsirul incepe de la 0 daca nu sunt egala
break;//o sa iese din for-ul pt j si o sa creasca i-ul
}
}
}
*/
fprintf(g,"%d\n",k);
for(i = 0 ; i < k ; i++)
{
if (i >= 1000)
break;
fprintf(g,"%d\t",pozitii[i]);
}
fclose(f);
fclose(g);
return 0;
}