Cod sursa(job #1347407)

Utilizator cristian.cazanCristian-Claudiu Cazan cristian.cazan Data 18 februarie 2015 22:36:40
Problema Convertor Scor 20
Compilator c Status done
Runda rosedu_cdl_2015 Marime 2.43 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 == '[' || c == ']')
            nrp++;
        if(c == '}')
        {
            nraci++;
            nracd=0;
        }
        if(c == '{')
        {
            nracd++;
            nraci=0;
        }
        if(c == '"')
            nrg++;
        if(c == ':')
            nrdp++;
        if(c == ',')
        {
            nrdp=0;
            nrg=0;
        }
        //Eliminam spatiile intre ghilimele si doua puncte
        if(nrdp==0 && nrg==2 && c==' ')
            continue;
        if(nrdp==1 && nrg==2 && c==' ')
            continue;
        //Eliminam spatiile intre 2 acolade
        if(nracd==0 && nracd!=0 && c==' ')
            continue;
        //Eliminam spatiile intre {}si []
        if(nracd == 0 && nraci == 0 && nrp==1 && c==' ')
            continue;
        if(nraci == 1 && nracd==0 && nrp==1 && nrdp!=0 && c==' ')
            continue;
        if(nracd!=0 && nrp)

            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,",");
                }
                else 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;
}