Cod sursa(job #1342921)

Utilizator MIonutMistreanu Ionut MIonut Data 14 februarie 2015 17:56:48
Problema Convertor Scor 70
Compilator c Status done
Runda rosedu_cdl_2015 Marime 2.51 kb
#include<stdio.h>

int stare = 1, i=-1, j=-1;
FILE *f, *g;

struct val{
    char valoare[1024];
}v[10000];

void automat_save(char c)
{
    switch(stare){
    case 1:
        if (c == '"') stare = 2;
        break;

    case 2:
       if (c == '"') {stare = 3;   i++; j=-1;  fprintf(g, ",");}
       else
            fprintf(g, "%c", c);
       break;

    case 3:
        if (c == '"') stare = 4;
        else
            if( c>='0' && c<='9')
                {v[i].valoare[++j] = c; stare = 7;}
        break;

    case 4:
        if (c == '"')  {v[i].valoare[++j] = '\0'; stare = 5;}
        else v[i].valoare[++j] = c;
        break;

    case 5:
        if (c == ',') stare = 1;
        else if ( c == '}') stare = 6;
        break;

    case 6:
        if (c == ']') stare = 9;
        else if ( c == '{') stare = 8;
        break;

    case 7:
        if (c == ',') { v[i].valoare[++j] = '\0'; stare = 1; }
        else if ( c == '}') { v[i].valoare[++j] = '\0'; stare = 6; }
        else if(c >='0' && c<='9') v[i].valoare[++j] = c;
        break;
    }
}

void automat_afis(char c)
{
    switch(stare){
    case 1:
        if (c == '"') stare = 2;
        break;

    case 2:
       if (c == '"')  stare = 3;
       break;


    case 3:
        if (c == '"') stare = 4;
         else
            if(c >='0' && c<='9')
                {fprintf(g, "%c", c); stare = 7;}
        break;

    case 4:
        if (c == '"') {  fprintf(g, ","); stare = 5;}
        else fprintf(g, "%c", c);
        break;

    case 5:
        if (c == ',') stare = 1;
        else if ( c == '}') stare = 6;
        break;

    case 6:
        if (c == ']') stare = 9;
        else if ( c == '{') { fprintf(g, "\n"); stare = 1; }
        break;

    case 7:
        if (c == ',') {  fprintf(g, ","); stare = 1;}
        else if ( c == '}') {  fprintf(g, ","); stare = 6;}
        else if(c >='0' && c<='9') fprintf(g, "%c", c);
        break;
    }

}

int main(){

    char c;
    int k;

    f = fopen("convertor.in", "rt");
    g = fopen("convertor.out", "wt");

    while( stare < 8 && fscanf(f, "%c", &c) == 1 )
            automat_save(c);

    fprintf(g, "\n");

    for(k=0; k<=i; k++){
        fprintf(g, "%s", v[k].valoare);
        fprintf(g, ",");
    }
    fprintf(g, "\n");
    if(stare == 8){
        stare = 1;
           while( fscanf(f, "%c", &c) == 1 && stare!=9 )
                automat_afis(c);
    }
    fclose(g);
    fclose(f);

return 0;
}