Cod sursa(job #1361507)

Utilizator MikkennCorneci Vlad Mihai Mikkenn Data 25 februarie 2015 21:42:37
Problema Convertor Scor 100
Compilator c Status done
Runda rosedu_cdl_2015 Marime 1.76 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*Headers pentru cap de tabel*/
char *headers(FILE * f)
{
	char *buffer;
	char *capete;
	int size = 20;
	capete = malloc(size);
	int i, a = 0, p = 0, g = 0;
	int lg;
	buffer = malloc(1024);
	while (1) {
		fgets(buffer, 1024, f);
		lg = strlen(buffer);
		for (i = 0; i < lg; i++) {
			if (buffer[i] == ',')
				a++;
			if (buffer[i] == '}')
				return capete;
			else if (buffer[i] == ':')
				p++;
			/* Daca sunt in zona din stanga celor: */
			if (a == p) {
				if (buffer[i] == '\"') {
					g++;
					if (g % 2 == 0) {
						printf(",");
					}
				} else if (g % 2 == 1) {
					printf("%c", buffer[i]);
				}
			}
		}
	}
	return capete;
}

/* Corp pentru interiorul codului */
void corp(FILE * f)
{
	char *buffer;
	/*a nr de virgule, g nr de : */
	int i, a = 0, p = 0, g = 0;
	int lg;
	buffer = malloc(1024);

	while ((fgets(buffer, 1024, f)) != NULL) {
		lg = strlen(buffer);
		for (i = 0; i < lg; i++) {
			if (buffer[i] == ',') {
				a++;
			}
			if (buffer[i] == ':') {
				i++;
				p++;
			}
			/* Daca sunt in zona din dreapta celor : */
			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(",");
				}
			}
		}
	}
}

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