Cod sursa(job #1360526)

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

/*
	Probleme:
	-nu vede acoladele {
*/

int main()
{
	char *s;
	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))
	{
		if (cadru == 1 || cadru == 3) cadru--;

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

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

				case 1:
					while (s[0] != '"' && strlen(s) > 0)
						strcpy(s, s + 1);
					strcpy(s, s + 1);
					while (s[0] != '"' && strlen(s) > 0)
					{
						if (ok == 0)
						{
							u++;
							unu = (char *)realloc(unu, u * sizeof(char));
							strncat(unu, s, 1);
						}
						strcpy(s, s + 1);
					}
					cadru = 2;
					if (ok == 0) 
					{
						u++;
						unu = (char *)realloc(unu, u * sizeof(char));
						strcat(unu, ",");
					}
					strcpy(s, s + 1);
					break;

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

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

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