Cod sursa(job #1349136)

Utilizator RobertBBadea Corneliu Robert RobertB Data 20 februarie 2015 00:00:39
Problema Convertor Scor 100
Compilator c Status done
Runda rosedu_cdl_2015 Marime 1.47 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* seek_char(char* p, const char ch)
{
	do{
		p++;
	}while(*p != ch && *p != '\0');

	return p;
}

char* seek_nonwsp(char*p) {
	while(*p == ' ' || *p == '\n') {
		p++;
	}
	return p;
}
int main()
{
	FILE* f = fopen("convertor.in","rt");
	FILE* g = fopen("convertor.out","wt");

	//find file size
	fseek(f, 0, SEEK_END); 
	long int size = ftell(f);
	rewind(f);

	//read JSON
	char* string = malloc(sizeof(char) * size + 1);
	fread(string, sizeof(char), size, f);
	char* beg = string;

	//parse
	char* obj_end = seek_char(string, '}');
	while(string < obj_end) {
		string = seek_char(string, '\"');
		string++;
		while(*string != '\"') {
			fprintf(g, "%c", *string);
			string++;
		}
		fprintf(g, ",");
		string = seek_char(string, ',');
	}
	string = beg;
	while(string < beg + size) {
		string = seek_char(string, '{');
		if(*string == '\0') break;
		obj_end = seek_char(string, '}');
		fprintf(g, "\n");
		while(string < obj_end) {
			string = seek_char(string, ':');
			string++;
			string = seek_nonwsp(string);
			printf("%c ", *string);
			if(*string == '\"') {
				string++;
				while(*string != '\"') {
					// printf("%c\n", *string);
					fprintf(g, "%c", *string);
					string++;
				}
			} else {
				while(strchr("0123456789", *string)) {
					fprintf(g, "%c", *string);
					string++;
				}
			}
			// printf("1\n");
			
			fprintf(g, ",");
			string = seek_char(string - 1, ',');
		}
		printf("\n");
		string = obj_end;
	}
}