Cod sursa(job #1360630)

Utilizator MikkennCorneci Vlad Mihai Mikkenn Data 25 februarie 2015 16:55:11
Problema Convertor Scor 40
Compilator c Status done
Runda rosedu_cdl_2015 Marime 2.42 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *headers(int *virgule)
{
	FILE *f;
	char *buffer;
	char *capete;
	int size = 50;
	capete = malloc(size);
	//  int virgule = 0;
	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] == '}') {
				//printf("\nAICI%d",virgule);
				return capete;
			} else if (buffer[i] == ':')
				p++;
			if (a == p) {
				if (buffer[i] == '\"') {
					g++;
					if (g % 2 == 0) {
						capete[index] = ',';
						index++;
						(*virgule)++;
						//printf("%d", *virgule);
					}
				}
				if (g % 2 == 1 && buffer[i] != '\"') {
					capete[index] = buffer[i];
					index++;
				}
			}
		}
	}

	return capete;
}

void corp(int n)
{
	FILE *f;
	char *buffer;
	int i;
	int contor = 0; 
	// int i, a = 0, p = 0;
	char *ptr;
	buffer = malloc(1024);
	f = fopen("convertor.in", "r");
	while ((fgets(buffer, 1024, f)) != NULL) {
		//printf("%d %d", n, contor);
		ptr = strchr(buffer, ':');
		if (ptr != NULL) {
			for (i = 0; i < strlen(ptr); i++) {
				if (ptr[i] == '\"') {
					i++;
					while (ptr[i] != '\"') {
						printf("%c", ptr[i]);
						i++;
					}
					printf(",");
					contor++;
					break;
				}
				if (ptr[i] >= 48 && ptr[i] <= 57) {
					while (ptr[i] >= 48 && ptr[i] <= 57) {
						printf("%c", ptr[i]);
						i++;
					}
					i--;
					printf(",");
					contor++;
					break;

				}
			}
					if (contor == n) {
						printf("\n");
						contor = 0;
					}
			ptr++;
			while ((ptr = strchr(ptr, ':')) != NULL) {
				for (i = 0; i < strlen(ptr); i++) {
					
					if (ptr[i] == '\"') {
						i++;
						while (ptr[i] != '\"') {
							printf("%c", ptr[i]);
							i++;
						}
						printf(",");
						contor++;
						break;
					}
					if (ptr[i] >= 48 && ptr[i] <= 57) {
						while (ptr[i] >= 48
						       && ptr[i] <= 57) {
							printf("%c", ptr[i]);
							i++;
						}
						i--;
						printf(",");
						contor++;
						break;
					}
				}

				ptr++;
			}
		}
	}
	if ( contor != 0)
		printf("\n");

}

int main()
{
	char *capete;
	int cuvinte = 0;
	freopen("convertor.out", "w", stdout);
	capete = headers(&cuvinte);
	printf("%s\n", capete);
	corp(cuvinte);
	return 0;
}