Cod sursa(job #1347215)

Utilizator cristian.cazanCristian-Claudiu Cazan cristian.cazan Data 18 februarie 2015 20:51:07
Problema Convertor Scor 0
Compilator c Status done
Runda rosedu_cdl_2015 Marime 2.66 kb
#include <stdio.h>
#include <string.h>


int main ()
{
    FILE *f,*g;
    int i,j,a=0,b=0;
    char c, p[1500],q[1500],*bf;
    f=fopen("convertor.in","rt");
    g=fopen("convertor.out","wt");
    i=0;
    int nrg=0,nrp=0,nracd=0,nraci=0,nrdp=0;//Nr ghilimele pentru spatii & shit
    while(!feof(f))
    {
        fscanf(f,"%c",&c);
        if(c == '"')
            nrg++;
        if( c == ',')
        {
            nrdp=0;
            nrg=0;
        }
        if( c == '[' || c == ']')
            nrp++;
        if( c == '{')
        {
            nraci=0;
            nracd++;
        }
        if(c == '}')
        {
            nraci++;
            nracd=0;
        }
        if( c == ':')
            nrdp++;

        if( nrp == 1 && nracd==0 && (c==' ' ||c =='\n'))
            continue; // Elimina spatiile intre acoloade deschise si paranteze
        if( nrp == 1 && nraci==0 && (c==' ' || c =='\n'))
            continue; // Elimina spatiile intre acoloade inchise si paranteze
        if(nrdp == 0 && nrg==2 && (c==' ' ||c =='\n'))
            continue;// Elimina spatiile intre : si ghilimele (inainte de : si dupa ghilimele)
        if(nrdp == 1 && nrg==2 && (c==' ' || c =='\n'))
            continue;//Elimina spatiile intre : si ghilimele (dupa : si inainte de ghilimele)
        if(nraci == 1 && nracd == 0 && (c==' ' || c =='\n'))
            continue;//Elimina spatiile intre o acolada inchisa si una deschisa


        //Trebuie eliminate spatiile dintre [ si { si :

        if(c == '\n' )
            continue;
        if(c == ':')
            a++;
        if(c == '{')
            b++;
        p[i]=c;
        i++;
    }
    p[i-1]='\0';
    bf=strtok(p,"{}\",\n:[]");
    i=0;
    j=0;
    while(bf != NULL)
    {
        if(strcmp(bf," ")!=0)
        {
            i++;
            if(i%2 == 1 && i< (a/b)*2 )
            {
                fprintf(g,"%s,",bf);
                if(i == (a/b)*2 -1)
                    fprintf(g,"\n");
            }
            if(i%2 == 0)
            {

                if(j == 0)
                {
                    strcpy(q,bf);
                    j++;
                    strcat(q,",");
                }
                if( i%((a/b)*2) == 0)
                {
                    strcat(q,bf);
                    strcat(q,",");
                    strcat(q,"\n");
                }
                else
                {
                    strcat(q,bf);
                    strcat(q,",");
                }

            }

        }
        bf=strtok(NULL,"{}\"\n,:[]");
    }
    fputs(q,g);
    fclose(f);
    fclose(g);

    return 0;
}