Cod sursa(job #1361791)

Utilizator BogdanChelesCheles Bogdan-Andrei BogdanCheles Data 25 februarie 2015 23:44:54
Problema Convertor Scor 90
Compilator c Status done
Runda rosedu_cdl_2015 Marime 2.12 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;
    char *sir;
    int ok1=0,ok2=0,cap=500,cap2=500,k=0,rulare=0,l=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==cap2-1)
        {
            cap2=10*cap2;
            ca=realloc(ca,cap2*sizeof(char));
        }
        if(rulare==0 && c[k]=='}')
        {
            rulare=1;
            ok1=0;
            ok2=0;
            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]!='"')
           {
               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)
        {
            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';
    fid=fopen("convertor.out","w");
    sir=malloc((cap+cap2)*sizeof(char));
    strcpy(sir,ca);
    strcat(sir,c);
    //fprintf(fid,"%s",ca);
    //fprintf(fid,"%s",c);
    fprintf(fid,"%s",sir);
    return 0;
}