#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int numar_caractere(FILE *input)
{
char c;
int nr = 0;
c = fgetc(input);
while(c != EOF)
{
nr++;
c = fgetc(input);
}
return nr;
}
void creare_string(char *string, FILE *input, int nr_carac)
{
int i;
for(i = 0; i < nr_carac; i++)
{
fscanf(input, "%c", &string[i]);
}
}
void stergere_carac(char *string, char c)
{
char *src, *dst;
for (src = dst = string; *src != '\0'; src++)
{
*dst = *src;
if (*dst != c)
{
dst++;
}
}
*dst = '\0';
}
int numar_chei(FILE *input)
{
int nr = 0;
char c;
c = fgetc(input);
while(c != '}')
{
if(c == ':')
{
nr++;
}
c = fgetc(input);
}
return nr;
}
void stergere_spatii(char *token)
{
int i;
for(i = 0; i < strlen(token); i++)
{
if(token[0] != ' ')
{
break;
}
if(token[i] != ' ' && token[i] != '\n')
{
strcpy(token, token + 1);
break;
}
else
{
strcpy(token, token + 1);
}
}
}
char *strrev(char *str)
{
char *p1, *p2;
if (! str || ! *str)
return str;
for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2)
{
*p1 ^= *p2;
*p2 ^= *p1;
*p1 ^= *p2;
}
return str;
}
void introducere_chei(FILE *output,char *string, char aux[200], int nr_chei)
{
char *token, *str;
int nr = 0;
token = strtok(string, ":,\n");
while(token != NULL)
{
stergere_spatii(token);
token = strrev(token);
stergere_spatii(token);
token = strrev(token);
str = strstr(aux, token);
if(str == NULL)
{
fprintf(output, "%s,", token);
nr++;
if(nr == nr_chei)
{
fprintf(output, "%s", "\n");
break;
}
}
token = strtok(NULL, ":,\n");
}
}
void introducere_elemente(FILE *output, int nr_chei, char *aux)
{
char *token;
int nr = 0;
token = strtok(aux, ",");
while(token != NULL)
{
stergere_spatii(token);
token = strrev(token);
stergere_spatii(token);
token = strrev(token);
fprintf(output, "%s,", token);
nr++;
if(nr == nr_chei)
{
nr = 0;
fprintf(output, "%s", "\n");
}
token = strtok(NULL, ",");
}
}
int main()
{
FILE *input, *output;
char *string, aux[20000], chei[20000], trash[7] = {'[', ']', '{', '}', '"'};
int nr_carac, nr_chei, i;
input = fopen("convertor.in", "rt");
if(input == NULL)
{
exit(1);
}
output = fopen("convertor.out", "wt");
if(output == NULL)
{
exit(1);
}
//------->creare string
nr_carac = numar_caractere(input);
string = (char*)malloc(nr_carac);
if(string == NULL)
{
exit(1);
}
rewind(input);
creare_string(string, input, nr_carac);
rewind(input);
//------->numar chei
nr_chei = numar_chei(input);
rewind(input);
//------->stergere trash
//---->stergere spatii din afara ghilimelelor
for(i = 0; i < strlen(trash); i++)
{
stergere_carac(string, trash[i]);
}
//------->elementele
int j, nr = 0;
for(i = 0; i < strlen(string); i++)
{
if(string[i] == ':')
{
j = i + 2;
while(string[j-1] != ',')
{
aux[nr] = string[j];
j++;
nr++;
}
}
}
//-------->cheile
introducere_chei(output, string, aux, nr_chei);
introducere_elemente(output, nr_chei, aux);
free(string);
fclose(input);
fclose(output);
return 0;
}