Cod sursa(job #1341746)

Utilizator constantinsegarceanuConstantin Segarceanu constantinsegarceanu Data 13 februarie 2015 01:12:07
Problema Convertor Scor 70
Compilator cpp Status done
Runda rosedu_cdl_2015 Marime 2.33 kb
#include <fstream>

using namespace std;

ifstream f("convertor.in");
ofstream g("convertor.out");
//ofstream h("log.txt");

int state = 1;

void property_automata(char c)
{
    switch(state)
    {
    case 1:
        if(c == '['){
            state = 2;
        }
        break;
    case 2:
        if(c == '{')
            state = 3;
        break;
    case 3:
        if(c == '"')
            state = 4;
        break;
    case 4:
        if(c == '"')
        {
            g << ',';
            state = 5;
        }
        else if(c > 47 && c < 58)
        {
            state = 6;
        }
        else
            g << c;
        break;
    case 5:
        if(c == ',')
            state = 3;
        if(c == '}')
            state = 7;
        break;
    case 6:
        if(c == ',')
            state = 3;
        break;
    }

}

void value_automata(char c)
{
    switch(state)
    {
    case 1:
        if(c == '[')
            state = 2;
        break;
    case 2:
        if(c == '{')
            state = 3;
        break;
    case 3:
        if(c == ':')
            state = 4;
        break;
    case 4:
        if(c == '"')
            state = 5;
        if(c > 47 && c < 58)
        {
            g << c;
            state = 8;
        }
        break;
    case 5:
        if(c == '"')
        {
            g << ',';
            state = 6;
        }
        else
            g << c;
        break;
    case 6:
        if(c == ',')
            state = 3;
        else if (c == '}')
            state = 7;
        break;
    case 7:
        if(c == ',')
        {
            g << "\n";
            state = 2;
        }
        else if(c == ']')
            state = 9;
        break;
    case 8:
        if(c == ' ' || c == ',' || c == '\n' || c == '\t')
        {
            g << ",";
            state = 3;
        }
        else
            g << c;
        break;
    }
}

int main()
{
    char n;
    while(f >> noskipws >> n && state != 7)
    {
        property_automata(n);
    }
    g << "\n";
    f.clear();
    f.seekg(0,ios::beg);
    state = 1;
    while(f >> noskipws >> n && state != 9)
    {
        //h << state << " " << n << endl;
        value_automata(n);
    }
    f.close();
    g.close();
    return 0;
}