Cod sursa(job #1359585)

Utilizator vlad.cruceruCruceru Vlad - Ionut vlad.cruceru Data 24 februarie 2015 23:45:58
Problema Convertor Scor 100
Compilator cpp Status done
Runda rosedu_cdl_2015 Marime 2.58 kb
#include <iostream>
#include <string>
#include <stdio.h>

using namespace std;

int main()
{
	FILE *g;
	g = fopen("convertor.out", "w");
	FILE *f;
	f = fopen("convertor.in", "r");

	string s;
	char c;
	int contor = 0;
	c = fgetc(f);
	string chei;
	while (c != '}')
	{
		if (c == '"')
		{
			/*
			 *daca s-a ajuns la un cuvant sau numar de pe pozitie
			 *impara atunci retinem cuvantul in stringul chei
			 *altfel in valori
			 */
			contor = (contor + 1) % 2;
			if (contor)
			{
				char x;
				x = fgetc(f);
				while (x != '"')
				{
					chei += x;
					x = fgetc(f);
				}
				chei += ',';
			}
			else
			{
				char x;
				x = fgetc(f);
				while (x != '"')
				{
					s += x;
					x = fgetc(f);
				}
				s += ',';
			}
		}
		else if (((c - '0') < 10) && (c - '0' >= 0))
		{
			contor = (contor + 1) % 2;
			// prima cifra a numarului
			s += c;
			char s3[1000];
			/*
			 *sirul va fi format din cifre cu o virgula sau '}' la sfarsit
			 *sau o virgula sau '}'
			 */
			fscanf(f, "%s", s3);
			string s2 (s3);
			int e = 0;
			if (s2.find("}") != string::npos)
				e = 1;
			while  (((s2.back() - '0') > 9) || (s2.back() - '0' < 0))
			{
				s2.pop_back();
				if (s2.size() == 0)
					break;
			}
			s += s2;
			s += ',';
			//adica se ajunge la o '}'
			if (e)
				break;
		}
		c = fgetc(f);
	}

	fputs(chei.c_str(), g);
	fputc('\n', g);
	//primu set de valori;
	fputs(s.c_str(), g);
	fputc('\n', g);
	c = fgetc(f);
	while (c != EOF)
	{
		if (c == '{')
		{
			string valori;
			contor = 0;
			while (c != '}')
			{
				if (c == '"')
				{
					contor = (contor + 1) % 2;
					if (contor == 0)
					{
						char x;
						x = fgetc(f);
						while (x != '"')
						{
							valori += x;
							x = fgetc(f);
						}
						valori += ',';
					}
					else
					{
						char x;
						do
						{
							x = fgetc(f);
						} while (x != '"');
					}
				}
				else if (((c - '0') < 10) && (c - '0' >= 0))
				{
					contor = (contor + 1) % 2;
					if (contor == 0)
					{
						valori += c;
						char s3[1000];
						fscanf(f, "%s", s3);
						string s2 (s3);
						int e = 0;
						if (s2.find("}") != string::npos)
							e = 1;
						while (((s2.back() - '0') > 9) || (s2.back() - '0' < 0))
						{
							s2.pop_back();
							if (s2.size() == 0)
								break;
						}
						valori += s2;
						valori += ',';
						if (e)
							break;
					}
				}
				c = fgetc(f);
			}
			fputs(valori.c_str(), g);
			fputc('\n', g);
		}
		c = fgetc(f);
	}
	fclose(f);
	fclose(g);
	return 0;
}