Cod sursa(job #1361051)

Utilizator alexandru.cosminaAlexandru Cosmina-Valentina alexandru.cosmina Data 25 februarie 2015 19:22:04
Problema Convertor Scor 70
Compilator cpp Status done
Runda rosedu_cdl_2015 Marime 1.87 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

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

	FILE *f = fopen("convertor.in", "rb");
	FILE *g = fopen("convertor.out", "w");

	fseek(f,0,2);
	dim = ftell(f);
	fseek(f,0,0);

	s = (char *)malloc(dim*sizeof(char));

	fread(s,sizeof(char),dim,f);

	i = 0;

	unu = (char *)malloc(dim*sizeof(char));
	doi = (char *)malloc(dim*sizeof(char));

	memcpy(unu, "n", 1);
	memcpy(doi, "n", 1);

	while (i != strlen(s))
	{
		switch (cadru)
		{
			case 0:
				while (s[i] != '"' && i != strlen(s))
				{
					if (s[i] == '}' && ok == 0)
					{
							ok = 1;
							memcpy(unu, unu + 1, strlen(unu));
							memcpy(doi, doi + 1, strlen(doi));

							fprintf(g, "%s\n%s", unu, doi);						
					}
					if (s[i] == '{' && ok == 1) 
					{
						fprintf(g, "\n");
					}
					i++;
				}
				cadru = 1;
				break;

			case 1:
				while (s[i] != '"' && i != strlen(s))
					i++;
				i++;
				while (s[i] != '"' && i != strlen(s))
				{
					if (ok == 0)
						strncat(unu, s + i, 1);
					i++;
				}
				cadru = 2;
				if (ok == 0) 
					strcat(unu, ",");
				i++;
				break;

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

			case 3:
				if (sir == 1)
				{
					sir = 0;
					i++;
					while (s[i] != '"')
					{
						if (ok == 0) 
							strncat(doi, s + i, 1);
						else fprintf(g, "%c", s[i]);
						i++;
					}
					i++;
				}
				else
				{
					while (s[i] >= '0' && s[i] <= '9' && i != strlen(s))
					{
						if (ok == 0) 
							strncat(doi, s + i, 1);
						else fprintf(g, "%c", s[i]);
						i++;
					}
				}
				if (ok == 0) 
					strcat(doi, ",");
				else
				{
					fprintf(g, ",");
				}
				cadru = 0;
				break;
		}
	}

	fprintf(g, "\n");

	fclose(f);
	fclose(g);
	return 0;
}