Cod sursa(job #1360663)

Utilizator alexandru.cosminaAlexandru Cosmina-Valentina alexandru.cosmina Data 25 februarie 2015 17:08:33
Problema Convertor Scor 70
Compilator c Status done
Runda rosedu_cdl_2015 Marime 2.12 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	char *s;
	int i;
	int u = 5000,d = 5000;
	char *unu;
	char *doi;
	int ok = 0;
	int cadru = 0;
	int sir = 0;
	s = (char *)malloc(1025*sizeof(char));
	unu = (char *)malloc(u*sizeof(char));
	doi = (char *)malloc(d*sizeof(char));

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

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

	while (fgets(s, 1025, f))
	{
		i = 0;
		if (cadru == 1 || cadru == 3) cadru--;

		/*if (ok == 0)
		{
			u = u + strlen(s) + 1;
			d = d + strlen(s) + 1;
			unu = (char *)realloc(unu, u * sizeof(char));
			doi = (char *)realloc(doi, d * sizeof(char));
		}*/

		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) + 1);
								memcpy(doi, doi + 1, strlen(doi) + 2);

								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;
}