Cod sursa(job #1360706)

Utilizator JulotMMihnea M. JulotM Data 25 februarie 2015 17:21:59
Problema Convertor Scor 60
Compilator cpp Status done
Runda rosedu_cdl_2015 Marime 3.05 kb
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    ifstream file1("convertor.in");
    ofstream file2("convertor.out", ios::trunc);

    char c, v1[100000];
    int n(0), v2[100000];

    bool dreapta(false), acolada(false), ghilimele(false), puncte(false);
    int _acolada(0), _ghilimele(0), _puncte(0);
    while(!file1.eof())
    {

        file1.get(c);

        /*if( c == '[' && !acolada && !ghilimele)
            dreapta = true;
        else
            if( c == ']' && !acolada && !ghilimele)
            {
                dreapta = false;
                file2 << ",";
            }*/



        if( c == '{' && !ghilimele)
        {
            acolada = true;
            _acolada++;
        }
        else
            if( c == '}' && !ghilimele && puncte)
            {
                acolada = false;
                _puncte = 0;
            }

        if(c == '"' && !ghilimele)
            ghilimele = true;
        else
            if( c == '"' && ghilimele)
                ghilimele = false;


        if(c == ':' && !ghilimele)
        {
            puncte = true;
            _puncte++;
        }

        if(c == ',' && !ghilimele)
            puncte = false;


        if(((ghilimele && c != '"') || (c>='0' && c<='9')) && !puncte)
        {
            v1[n] = c;
            v2[n] = _acolada;
            n++;
            //cout << c;
            //file2 << c;
        }
        else
            if(((ghilimele && c != '"') || (c>='0' && c<='9')) && puncte)
            {
                v1[n] = c;
                v2[n] = 0;
                n++;
                //cout << c;
                //file2 << c;
            }


    }
    file1.close();


    bool ok(true);
    int j = 1;
    for(int i=0; i<n; i++)
    {
        if(v2[i] == 1)
        {
            file2 << v1[i];
            ok = true;
        }
        else
        {
            if(v2[i] == 0 && ok)
            {
                file2 << ",";
                ok = false;
            }
            else
                if(v2[i] > 1)
                {
                    file2 << "\n";
                    break;
                }
        }
    }

    bool ok1(false);

    for(int i=0; i<n; i++)
    {
        if(v2[i] == j && !ok1)
        {
            ok = true; // daca intra pe sectiune 1
            ok1 = false;
        }
        else
        {
            if(v2[i] == 0 && (ok || ok1))
            {
                file2 << v1[i];

                if(v2[i+1] == j+1)
                {
                    file2 << ",";
                    file2 << "\n";
                    j++;
                }
                else
                    if(v2[i+1] == j)
                    file2 << ",";
                ok = false; // iese de pe sectiune dif de 0
                ok1 = true; //

            }

            /*if(v2[i] == 0 )
            {
                cout << ",";
                //ok = false;
            }*/
        }
    }

    file2 << ",";
    file2.close();

    /*cout << endl << endl;

    for(int i=0; i<n; i++)
        cout << v2[i];

    cout << "\n" << n;*/



    return 0;
}