Cod sursa(job #1360595)

Utilizator alexandru.cosminaAlexandru Cosmina-Valentina alexandru.cosmina Data 25 februarie 2015 16:44:10
Problema Convertor Scor 0
Compilator c Status done
Runda rosedu_cdl_2015 Marime 2.3 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	char *s;
	int i;
	int u = 2,d = 2;
	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");

	strcpy(unu, "n");
	strcpy(doi, "n");

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

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

								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)
						{
							u++;
							unu = (char *)realloc(unu, u * sizeof(char));
							strncat(unu, s + i, 1);
						}
						i++;
					}
					cadru = 2;
					if (ok == 0) 
					{
						u++;
						unu = (char *)realloc(unu, u * sizeof(char));
						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) 
							{
								d++;
								doi = (char *)realloc(doi, d * sizeof(char));
								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) 
							{
								d++;
								doi = (char *)realloc(doi, d * sizeof(char));
								strncat(doi, s + i, 1);
							}
							else fprintf(g, "%c", s[i]);
							i++;
						}
					}
					if (ok == 0) 
					{
						d++;
						doi = (char *)realloc(doi, d * sizeof(char));
						strcat(doi, ",");
					}
					else
					{
						fprintf(g, ",");
					}
					cadru = 0;
					break;
			}
		}
	}

	fprintf(g, "\n");

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