Cod sursa(job #1349971)

Utilizator cristian.cazanCristian-Claudiu Cazan cristian.cazan Data 20 februarie 2015 16:28:32
Problema Convertor Scor 70
Compilator c Status done
Runda rosedu_cdl_2015 Marime 2.31 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
 void alocaremem(FILE *f ,char **a , char **b)
 {
 	char c;int i=0;
 	while(!feof(f))
 	{
 		i++;
 		fscanf(f,"%c",&c);
 	}
 	*a=malloc(i*sizeof(char));
 	*b=malloc(i*sizeof(char));
 	rewind(f);
 }
int main()
{
    FILE *f,*g;
    char c,*p,*q;
    short i,j,nrg=0,nrdp=0,nra=0,adp=0;
 
    if((f = fopen("convertor.in","rt")) == NULL || (g=fopen("convertor.out","wt")) == NULL)
        perror("NU S-A PUTUT DESCHIDE FISIERUL");
 
    i=0;
    j=0;

    alocaremem(f,&p,&q);
    while(!feof(f))
    {
        fscanf(f,"%c",&c);
        if( c == '\n')
            continue;
        if( c == '"')
            {nrg++;
                continue;
            }
        if( c == '{')
            {nra++;adp=0;continue;}
        if( c == ':' )
        {
            nrg = 0;
            adp++;
            nrdp++;
            if(nra == 1)
            {
            p[i]=',';
            i++;
            }
            if(adp != 1 )
            {
                q[j]=',';
                j++;
            }
            continue;
        }
        if( c == ',')
        {
            nrg = 0;
            nrdp = 0;
        }
        // pentru setul de chei
        if( nra == 1 && nrdp == 0 && nrg == 1 )
        {
            p[i]=c;
            i++;
        }
        // pentru valorile intregi ( fara ghilimele)
 
        if( nrdp == 1 && nrg == 0 && c != ' ' && c != ',' && c != '}' && c != '{' && c != ']' && c != '[')
        {
            q[j]=c;
            j++;
        }
 
        // pentru valorile ne intregi ( cu ghilimele)
 
        if( nrdp == 1 && nrg == 1 && c != '}' && c != '}' && c != ',' && c != ']' && c != '[')
        {
            q[j]=c;
            j++;
        }
 
        // acum dupa fiecare obiect trecem pe rand nou
 
        if( c == '}' )
        {
            if(nra == 1 )
            {
                p[i]='\n';
                i++;
                q[j]=',';
                j++;
                q[j]='\n';
                j++;
            }else
            {
                q[j]=',';
                j++;
                q[j]='\n';
                j++;
            }
        }
        if( c == ']')
        {
            p[i]='\0';
            q[j]='\0';
            break;
        }
    }
    fprintf(g,"%s%s",p,q);
    free(p);free(q);
    fclose(f);fclose(g);
    return 0;
}