Cod sursa(job #1361061)

Utilizator diana_ionDiana Ion diana_ion Data 25 februarie 2015 19:24:57
Problema Convertor Scor 100
Compilator cpp Status done
Runda rosedu_cdl_2015 Marime 2.04 kb
#include <iostream>
#include <stdio.h>

using namespace std;


void write_string(FILE* input, FILE* output)
{
    char ch;
    ch = fgetc(input);
    while(ch != '\"') {
        fputc(ch,output);
        ch = fgetc(input);
    }
    fputc(',', output);
}

int main()
{

    char ch;
    FILE* input, *output;
    input = fopen("convertor.in", "r");
    output = fopen("convertor.out", "w");

    //parcurg prima acolada din fisier si scriu cheile
    while((ch = fgetc(input)) != '}'){

        //la intalnirea unei ghilimele se stie ca s-a gasit o cheie
        if(ch == '\"')
          write_string(input, output);

        //daca se gasesc ghilimele imediat dupa semnul doua puncte
        //atunci intre ghilimele este o valoare, deci nu se scrie in fisier
        else
            if(ch == ':'){
                ch = fgetc(input);
                while(ch == ' ' || ch == '\n'){
                    ch = fgetc(input);
                }
                if ( ch == '"'){
                    ch = fgetc(input);
                    while(ch != '"'){
                        ch = fgetc(input);
                    }
                }
            }
    }

    fseek(input, 0, SEEK_SET);

    //scriu valorile
    while((ch = fgetc(input)) != EOF){

        if(ch == '{')
            fputc('\n', output);
        else
            //fiecare valoare se afla dupa semnul doua puncte
            if(ch == ':'){
                ch = fgetc(input);
                while(ch == ' ' || ch == '\n'){
                    ch = fgetc(input);
                }
                if(isdigit(ch)) {
                    while(ch != ' ' && ch != ',' && ch != '}' && ch != '\n'){
                        fputc(ch, output);
                        ch = fgetc(input);
                    }
                    fputc(',', output);
                }
                else
                    if ( ch == '"')
                        write_string(input, output);
            }
    }

    fclose(input);
    fclose(output);

    return 0;
}