Cod sursa(job #1361485)

Utilizator MikkennCorneci Vlad Mihai Mikkenn Data 25 februarie 2015 21:29:48
Problema Convertor Scor 70
Compilator c Status done
Runda rosedu_cdl_2015 Marime 2.21 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char* headers(FILE *f)
{
    char *buffer;
    char *capete;
    int size =20;
    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 (buffer[i] == ',')
                a++;
            if (buffer[i] == '}')
                return capete;
            else if (buffer[i] == ':')
                p++;
            if (a == p) {
            	if ( strlen(capete) +3 > size){
                capete = realloc ( capete, size *2);
                size *=2;
            }
                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 int i, a = 0, p = 0, g = 0;
    buffer = malloc(1024);
  	while ((fgets(buffer, 1024, f)) != NULL) {
  		for ( i = 0; i< strlen(buffer); i++){
	  		if (buffer[i] == ','){
	  			//printf(",");
	  			a++;
	  		}
	  		if (buffer[i] == ':'){
	  			i++;
	  			p++;
	  		}
	  		
  			if( a < p){
  				if ( buffer[i] == '}')
	  			printf("\n");
  				if( buffer[i] == '\"'){
  					g++;
  					if( g % 2 == 0)
  						printf(",");
  				}
  				if( g % 2 == 1 && buffer[i] != '\"'){
  					printf("%c",  buffer[i]);
  				}

  				if (buffer[i] >= 48 && buffer[i] <= 57 && g % 2 ==0) {
                        printf("%c", buffer[i]);
                        if(buffer[i+1] < 48 || buffer[i+1] >57)
                        	printf(",");
                }

  			}

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