Cod sursa(job #1361772)

Utilizator BogdanChelesCheles Bogdan-Andrei BogdanCheles Data 25 februarie 2015 23:37:54
Problema Convertor Scor 60
Compilator c Status done
Runda rosedu_cdl_2015 Marime 2.08 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    FILE *f;
    FILE *fid;
    f=fopen("convertor.in","r");
    char *c;
    char *ca;
    fid=fopen("convertor.out","w");
    int ok1=0,ok2=0,cap=500,k=0,rulare=0,l=0,i=0;
    c=malloc(cap*sizeof(char));
    ca=malloc(cap*sizeof(char));
    while(fscanf(f,"%c",&c[k])==1)
    {
        if(k==cap-1)
        {
            cap=15*cap;
            c=realloc(c,cap*sizeof(char));
        }
        if(l==cap-1)
        {
            cap=2*cap;
            ca=realloc(ca,cap*sizeof(char));
        }
        if(rulare==0 && c[k]=='}')
        {
            rulare=1;
            ok1=0;
            ok2=0;
            //fprintf(fid,",\n");
            ca[l]=',';
            l++;
            ca[l]='\n';
            l++;
            ca[l]='\0';
        }
        if(rulare==0 && c[k]=='"')
        {
            if(ok1==0)
            ok1=1;
            else if(ok1==1)
            ok1=-1;
        }
        if(rulare==0 && ok1==1 && c[k]!='"')
           //fprintf(fid,"%c",c[k]);
           {
               ca[l]=c[k];
               l++;
           }
        if(rulare==0 && c[k]==':')
            ok1=-2;
        if((ok1==1 && rulare==1 && c[k]=='"') || (ok1==-2 && c[k]=='"'))
        {
                if(ok2==0)
                    ok2=1;
                else
                    ok2=0;

        }
        if(c[k]==',' && rulare==0)
        {
            //fprintf(fid,",");
            ca[l]=',';
            l++;
            ok1=0;
        }
        if(rulare==1 && c[k]=='{') {c[k]='\n'; k++;}
        if(rulare==1 && c[k]==':') ok1=1;
        if((ok2==1 && c[k]!='"' && rulare==1) || (c[k]>='0' && c[k]<='9' && rulare==1) || (rulare==1 && c[k]==',') ||
           (rulare==0 && c[k]!='"' && ok2==1 && ok1==-2) || (c[k]>='0' && c[k]<='9' && rulare==0 ) || (c[k]==',' && rulare==0))
        {
            if(c[k]==',' && rulare==1) ok1=0;
            k++;
        }
    }
    c[k]=',';
    c[k+1]='\0';
    fprintf(fid,"%s",ca);
    fprintf(fid,"%s",c);
    return 0;
}