Cod sursa(job #1346629)

Utilizator andreeadimaDima Andreea andreeadima Data 18 februarie 2015 14:41:52
Problema Convertor Scor 100
Compilator cpp Status done
Runda rosedu_cdl_2015 Marime 1.8 kb
#include <fstream>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

#define LG 2000000

ofstream fout("convertor.out");

char c[LG];
int i;
string s;

int main()
{
    int g_ok = 0; 
	freopen("convertor.in","r",stdin);
	fread(c,1,LG,stdin); // preia datele intr-un sir de caractere
	
	i=0;
    do
    i ++; 
    while (c[i] != '{');// cauta primul obiect
	
    do
    {
		i ++;
        if (c[i] == '"') // verificam daca intalnim ghilimele
            g_ok ++;
        if (g_ok == 1 && c[i] != '"') // daca c[i] este un caracter dintr-o cheie
            s += c[i];
        if (c[i] == ',') // daca urmeaza o noua pereche cheie-valoare
        {
            g_ok = 0; // resetam contorul de ghilimele
            s += c[i];
        }
    }
    while (c[i]!= '}'); // repeta cat timp nu s-a ajuns la finalul primului obiect
    s += ',';
	s += '\n';
	
	i = 0;
    g_ok = 0; 
    do
    i ++;
    while (c[i] != '{'); // cauta primul obiect
	
    do
    {
		i++;
        if (c[i] == '"') // verificam daca apar ghilimele
            g_ok ++;
        if (g_ok == 2 && c[i] != '"' && c[i] != ':' && c[i] != '{' && c[i] != '}' && c[i] != ']' && c[i] != ' ' && c[i] != ',' && (int)c[i] != 10) //daca valaorea nu este un string 
            s += c[i];
        if (g_ok == 3 && c[i] != '"') // daca valoarea este un string
            s += c[i];
        if ( c[i] == ',') // daca urmeaza o noua pereche cheie valoare
            {
                g_ok = 0;
                s += c[i];
            }
        if (c[i] == '{') // daca urmeaza un nou obiect
            s += '\n';
    }
    while (c[i] != ']'); // repeta cat timp mai exista obiecte in json
    s += ',';
	
	fout<<s; //afiseaza stringul rezultat
	
    fout.close();
    return 0;
}