Cod sursa(job #1343206)

Utilizator MIonutMistreanu Ionut MIonut Data 14 februarie 2015 23:38:20
Problema Convertor Scor 70
Compilator c Status done
Runda rosedu_cdl_2015 Marime 1.99 kb
#include<stdio.h>

FILE *f, *g;
int stare = 1;

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

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

    case 3:
        if (c == ',') stare = 4;
        else if(c == '}') stare = 5;
        break;

    case 4:
        if (c == '"') stare = 2;
        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 = 5;
        }
        break;

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

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


    case 6:
        if (c == '"') stare = 2;
        else if ( c == '}') stare = 7;
        break;

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

}

int main()
{
    char c;

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

    while( stare !=5 && fscanf(f, "%c", &c) == 1 )
        automat_cheie(c);

    fseek( f , 0, SEEK_SET);
    fprintf(g, "\n");

    if(stare == 5)
    {
        stare = 1;
        while( fscanf(f, "%c", &c) == 1 )
            automat_afis(c);
    }

    fclose(g);
    fclose(f);

    return 0;
}