Cod sursa(job #1361208)

Utilizator alexandru.cosminaAlexandru Cosmina-Valentina alexandru.cosmina Data 25 februarie 2015 20:10:41
Problema Convertor Scor 100
Compilator cpp Status done
Runda rosedu_cdl_2015 Marime 1.7 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fstream>
#include <string>

using namespace std;

ifstream f("convertor.in");
ofstream g("convertor.out");

int main()
{
	string *s;
	long int dim;
	long int i;
	string *doi;
	int ok = 0;
	int cadru = 0;
	int sir = 0;

	f.seekg(0,f.end);
	dim = f.tellg();
	f.seekg(0,f.beg);

	char *aux = new char[dim];

	f.read(aux,dim);

	s = new string (aux);
	doi = new string;

	delete[] aux;

	i = 0;

	while (i != s->size() - 1)
	{
		switch (cadru)
		{
			case 0:
				while (s->at(i) != '"' && i != s->size() - 1)
				{
					if (s->at(i) == '}' && ok == 0)
					{
							ok = 1;
							g<<'\n'<<*doi;						
					}
					if (s->at(i) == '{' && ok == 1) 
						g<<'\n';
					i++;
				}
				cadru = 1;
				break;

			case 1:
				while (s->at(i) != '"' && i != s->size() - 1)
					i++;
				i++;
				while (s->at(i) != '"' && i != s->size() - 1)
				{
					if (ok == 0)
						g<<s->at(i);
					i++;
				}
				cadru = 2;
				if (ok == 0) 
					g<<',';
				i++;
				break;

			case 2:
				while (s->at(i) != '"' && (s->at(i) < '0' || s->at(i) > '9') && i != s->size() - 1)
					i++;
				if (s->at(i) == '"')	sir = 1;
				cadru = 3;
				break;

			case 3:
				if (sir == 1)
				{
					sir = 0;
					i++;
					while (s->at(i) != '"')
					{
						if (ok == 0) 
							doi->push_back(s->at(i));
						else g<<s->at(i);
						i++;
					}
					i++;
				}
				else
				{
					while (s->at(i) >= '0' && s->at(i) <= '9' && i != s->size() - 1)
					{
						if (ok == 0) 
							doi->push_back(s->at(i));
						else g<<s->at(i);
						i++;
					}
				}
				if (ok == 0) 
					doi->push_back(',');
				else
					g<<',';
				cadru = 0;
				break;
		}
	}

	g<<'\n';

	f.close();
	g.close();
	return 0;
}