Cod sursa(job #1349853)

Utilizator cristian.cazanCristian-Claudiu Cazan cristian.cazan Data 20 februarie 2015 15:32:47
Problema Convertor Scor 70
Compilator c Status done
Runda rosedu_cdl_2015 Marime 1.43 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main()
{
	FILE *f,*g;
	char c,p[100000],q[900000];
	short i,j,nrg=0,nrdp=0,nra=0,adp=0;

	if((f = fopen("convertor.in","rt")) == NULL || (g=fopen("convertor.out","wt")) == NULL)
		perror("NU S-A PUTUT DESCHIDE FISIERUL");

	i=0;
	j=0;
	while(!feof(f))
	{
		fscanf(f,"%c",&c);
		if( c == '\n')
			continue;
		if( c == '"')
			{nrg++;
				continue;
			}
		if( c == '{')
			{nra++;adp=0;continue;}
		if( c == ':' )
		{
			nrg = 0;
			adp++;
			nrdp++;
			if(nra == 1)
			{
			p[i]=',';
			i++;
			}
			if(adp != 1 )
			{
				q[j]=',';
				j++;
			}
			continue;
		}
		if( c == ',')
		{
			nrg = 0;
			nrdp = 0;
		}
		// pentru setul de chei
		if( nra == 1 && nrdp == 0 && nrg == 1 )
		{
			p[i]=c;
			i++;
		}
		// pentru valorile intregi ( fara ghilimele)

		if( nrdp == 1 && nrg == 0 && c != ' ' && c != ',' && c != '}' && c != '{' && c != ']' && c != '[')
		{
			q[j]=c;
			j++;
		}

		// pentru valorile ne intregi ( cu ghilimele)

		if( nrdp == 1 && nrg == 1 && c != '}' && c != '}' && c != ',' && c != ']' && c != '[')
		{
			q[j]=c;
			j++;
		}

		// acum dupa fiecare obiect trecem pe rand nou

		if( c == '}' )
		{
			if(nra == 1 )
			{
				p[i]='\n';
				i++;
				q[j]=',';
				j++;
				q[j]='\n';
				j++;
			}else
			{
				q[j]=',';
				j++;
				q[j]='\n';
				j++;
			}
		}
		if( c == ']')
		{
			p[i]='\0';
			q[j]='\0';
		}
	}
	fprintf(g,"%s%s",p,q);
	fclose(f);fclose(g);
	return 0;
}