Cod sursa(job #1361303)

Utilizator MikkennCorneci Vlad Mihai Mikkenn Data 25 februarie 2015 20:39:13
Problema Convertor Scor 60
Compilator c Status done
Runda rosedu_cdl_2015 Marime 2.55 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char* headers(FILE *f)
{
    char *buffer;
    char *capete;
    int size =50;
    capete = malloc(size);
    int i, a = 0, p = 0, g = 0, index = 0;
    buffer = malloc(1024);
 

    while (1) {
 
        fgets(buffer, 1024, f);
        for (i = 0; i < strlen(buffer); i++) {
            if ( strlen(capete) +3 > size){
                capete = realloc ( capete, size *2);
                size *=2;
            }
            if (buffer[i] == ',')
                a++;
            if (buffer[i] == '}')
                return capete;
            else if (buffer[i] == ':')
                p++;
            if (a == p) {
                if (buffer[i] == '\"') {
                    g++;
                    if (g % 2 == 0) {
                        capete[index] = ',';
                        index++;
                    }
                }
                if (g % 2 == 1 && buffer[i] != '\"') {
                    capete[index] = buffer[i];
                    index++;
                }
            }
        }
    }
    return capete;
}
 
void corp(FILE *f)
{
    char *buffer;
    register i, a = 0, p = 0;
    buffer = malloc(1024);
   while ((fgets(buffer, 1024, f)) != NULL) {
        a = 0, p = 0;
        for (i = 0; i < strlen(buffer); i++) {

            if (buffer[i] == ',')
                a++;
            else if (buffer[i] == ':')
                p++;
 
            if (buffer[i] == '}'){
                 
                printf("\n");
            }
            if (buffer[i] == '{'){
                a = 0 ;
                p = 0;
            }
 
            if (a < p) {
                /* stringuri */
                if (buffer[i] == '\"') {
                    i++;
                    while (buffer[i] != '\"') {
                        printf("%c", buffer[i]);
                        i++;
                    }
                    printf(",");
                }
 
                if (buffer[i] >= 48 && buffer[i] <= 57) {
                    while (buffer[i] >= 48
                           && buffer[i] <= 57) {
                        printf("%c", buffer[i]);
                        i++;
                    }
                    i--;
                    printf(",");
 
                }
            }

        }
    } 
}
 
int main()
{
    char *capete;
    FILE *f;
    f = fopen("convertor.in", "r");
    freopen("convertor.out", "w", stdout);
    //capete = malloc(1024);
 
    capete = headers(f);
    fseek ( f , 0 , SEEK_SET );
    printf("%s\n", capete);
    corp(f);
    //fputs(capete, stdout);
    return 0;
}