Cod sursa(job #1357017)

Utilizator alex_ovidiunituAlex Ovidiu Nitu alex_ovidiunitu Data 23 februarie 2015 18:28:40
Problema Convertor Scor 100
Compilator cpp Status done
Runda rosedu_cdl_2015 Marime 2.01 kb
#include <fstream>
#include <string>
using namespace std;
void scrieCheile(fstream &f, fstream &g)
{
    char ch;
    string cheie;
    do
    {
        while (f>>skipws>>ch)
            if (ch=='"')//urmeaza o cheie
                break;
        f>>noskipws>>ch;
        while (ch!='"')
        {
            cheie+=ch;
            f>>noskipws>>ch;
        }
        cheie+=',';

        g<<cheie;
        cheie.clear();

        while (f>>skipws>>ch)//cautam urmatoarea cheie (sau ne oprim)
            if (ch==',' || ch=='}')
                break;

    }while(ch!='}');
    g<<'\n';

}
void scrieValorile(fstream &f, fstream &g)
{
    char ch;
    string valoare;
    bool text;
    do
    {
        while (f>>skipws>>ch)
            if (ch==':')// urmeaza o valoare
                break;

        f>>skipws>>ch;
        text=0;
        if (ch=='"')
            text=1;
        if (text)// citim textul
        {
            f>>noskipws>>ch;
            while (ch!='"')
            {
                valoare+=ch;
                f>>noskipws>>ch;
            }
            valoare+=',';
            f>>skipws>>ch;
        }
        else//citim numarul (tot intr-un string)
        {
            valoare+=ch;
            f>>skipws>>ch;
            while (ch!=',' && ch!='}' )
            {
                if(ch!='\n' && ch!='\t')
                    valoare+=ch;
                f>>skipws>>ch;
            }
            valoare+=',';
        }
        g<<valoare;
        valoare.clear();
    }while (ch!='}');
    g<<'\n';
}
int main()
{
    char ch;
    fstream f,g;
    f.open("convertor.in",ios::in);
    g.open("convertor.out",ios::out);
    while (f>>ch)// caut prima { pt a scrie cheile
        if (ch=='{')
            break;
    //scriem prima linie (cheile)
    scrieCheile(f,g);
    f.seekg(0,ios::beg);
    while (f>>ch)
    {
        if (ch=='{')
            scrieValorile(f,g);
        if (ch==']')
            break;
    }
    return 0;
}