Cod sursa(job #1347610)

Utilizator ShardamaKaTache Alexandru Marius ShardamaKa Data 19 februarie 2015 02:00:17
Problema Convertor Scor 0
Compilator c Status done
Runda rosedu_cdl_2015 Marime 3.67 kb
#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);
        }
    }
}
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);
        if(token[strlen(token) - 1] == ' ')
        {
            token[strlen(token) - 1] = '\0';
        }
        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);
        if(token[strlen(token) - 1] == ' ')
        {
            token[strlen(token) - 1] = '\0';
        }
        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], 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
    for(i = 0; i < strlen(trash); i++)
    {
        stergere_carac(string, trash[i]);
    }
//------->introducere in output
    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++;
            }
        }

    }
    introducere_chei(output, string, aux, nr_chei);
    introducere_elemente(output, nr_chei, aux);
    free(string);
    fclose(input);
    fclose(output);
    return 0;
}