Cod sursa(job #1345442)

Utilizator gabriel93Robu Gabriel gabriel93 Data 17 februarie 2015 17:04:24
Problema Convertor Scor 80
Compilator cpp Status done
Runda rosedu_cdl_2015 Marime 1.75 kb
#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace std;

int get_Keys(ostream &fout, string s) {
    int nKeys = 0;

    while(!s.empty()) {
        int left = s.find('"');
        int right = s.find(':');

        string key = s.substr(left+1,right-left);
        int pos = key.find('"');
        key.erase(pos,key.size()-pos);

        fout << key << ',';
        ++nKeys;

        pos = s.find(',');
        if(pos != string::npos)
            s.erase(0,pos+1);
        else
            s.clear();
    }
    fout << '\n';
    return nKeys;
}

int main()
{
    fstream fin,fout;
    fin.open("convertor.in",fstream::in);
    fout.open("convertor.out",fstream::out);

    vector<string> Values;
    bool KeysFlag = true;
    int nKeys = 0;

    do {
        string s;
        getline(fin,s,'}');

        if(KeysFlag) {
            nKeys = get_Keys(fout,s);
            KeysFlag = false;
        }

        string value;
        bool flag = true;
        for(size_t i=0;i<s.size();++i)
            if( (s[i]!='[' && s[i]!=']' && s[i]!='{' && s[i]!='}' && s[i]!=':' && s[i]!='"' && s[i]!=' ' && s[i]!=',' && s[i]!='\n') || (!value.empty() && s[i]==' ') ) {
                value.push_back(s[i]);
            }
            else if(!value.empty()) {
                if(flag) {
                    flag = false;
                }
                else {
                    Values.push_back(value);
                    flag = true;
                }
                value.clear();
            }
    }while(!fin.eof());


    for(size_t i=0;i<Values.size();++i) {
        fout << Values[i] << ',';
        if(i%nKeys == nKeys-1)
            fout << '\n';
    }

    return 0;
}