Cod sursa(job #1360488)

Utilizator MikkennCorneci Vlad Mihai Mikkenn Data 25 februarie 2015 15:30:33
Problema Convertor Scor 0
Compilator c Status done
Runda rosedu_cdl_2015 Marime 1.84 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);

	f = fopen("convertor.in", "r");

	//buffer = strstr(buffer, "{");
	//fputs (buffer,stdout);
	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;
	int i, a = 0, p = 0;
	int nr=102400;
	buffer = malloc(102400);
	f = fopen("convertor.in", "r");

	while (nr == 10240) {
		nr = fread( buffer,1,102400,f);
		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;
	freopen("convertor.out", "w", stdout);
	//capete = malloc(1024);

	capete = headers();
	printf("%s\n", capete);
	corp();
	//fputs(capete, stdout);
	return 0;
}