Cod sursa(job #1200813)

Utilizator adrianbercaBerca Adrian adrianberca Data 23 iunie 2014 16:45:22
Problema Potrivirea sirurilor Scor 14
Compilator c Status done
Runda Arhiva educationala Marime 1.51 kb

//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;
}