Cod sursa(job #1361835)

Utilizator SergiududaDUDA Sergiu Sergiududa Data 26 februarie 2015 00:06:43
Problema Convertor Scor 0
Compilator cpp Status done
Runda rosedu_cdl_2015 Marime 3.95 kb
#include <stdio.h>
#include <string.h>

using namespace std;

void delete_enter(char c[1025])
{
    c[strlen(c)-1]=0;
}

void delete_spaces(char c[1025])
{
    char* p;
    int i=0;

    while(c[i]==' ')
        strcpy(c,c+1);
    /// Delete space before-after ":"
    for(p=strstr(c,": ");p;p=strstr(p,": "))
        strcpy(p+1,p+2);
    for(p=strstr(c," :");p;p=strstr(c," :"))
        strcpy(p,p+1);
    /// Delete space before-after ","
    for(p=strstr(c," ,");p;p=strstr(c," ,"))
        strcpy(p,p+1);
    for(p=strstr(c,", ");p;p=strstr(p,", "))
        strcpy(p+1,p+2);

    int contor =0;
    for( i=0;i<strlen(c);i++)
    {
        if(c[i]=='\"' && contor%2==0)
        {
            if(c[i-1]==' ')
                strcpy(c+i-1,c+i),contor++,i=i-2;
        }
        else
            {
                if(c[i]=='\"' && contor%2==0)
                    if(c[i+1]==' ')
                        strcpy(c+i,c+i+1),contor++,i=i-2;
            }

    }
    /// Delete space before-after "["
    for(p=strstr(c," [");p;p=strstr(c," ["))
        strcpy(p,p+1);
    for(p=strstr(c,"[ ");p;p=strstr(p,"[ "))
        strcpy(p+1,p+2);
    /// Delete space before-after "]"
    for(p=strstr(c," ]");p;p=strstr(c," ]"))
        strcpy(p,p+1);
    for(p=strstr(c,"] ");p;p=strstr(p,"] "))
        strcpy(p+1,p+2);
    /// Delete space before-after "{"
    for(p=strstr(c," {");p;p=strstr(c," {"))
        strcpy(p,p+1);
    for(p=strstr(c,"{ ");p;p=strstr(p,"{ "))
        strcpy(p+1,p+2);
        /// Delete space before-after "}"
    for(p=strstr(c," }");p;p=strstr(c," }"))
        strcpy(p,p+1);
    for(p=strstr(c,"{ ");p;p=strstr(p,"{ "))
        strcpy(p+1,p+2);
    /*/// Delete " "
    for(p=strstr(c," ");p;p=strstr(p," "))
        strcpy(p,p+1);
    */
}


void delete_quotations(char c[1025])
{
    char* p;
    for(p=strstr(c,"\"");p;p=strstr(p,"\""))
        strcpy(p,p+1);
}


void delete_uselessstuff(char c[1025])
{
    char* p;
    p=strstr(c,"[");
    if(p)
        strcpy(p,p+1);
    p=strstr(c,"]");
    if(p)
        strcpy(p,p+1);
        p=strstr(c,"{");
    if(p)
        strcpy(p,p+1);
        p=strstr(c,"}");
    if(p)
        strcpy(p,p+1);
}
void extract_header(FILE* f, FILE* g)
{
    char* p;
    char copie[1025],c[1025];
    int contor=0;
    do
    {
        fgets(c,1025,f);
        delete_enter(c);
        delete_spaces(c);
        delete_quotations(c);
        strcpy(copie,c);
        printf("%s\n",copie);
        if(strchr(copie,':') || strlen(copie)>3 && strcmp(copie,":") && strcmp(copie,","))
        for(p=strtok(copie,":,");p;p=strtok(NULL,":,"),contor++)
        {
            if(strchr(p,'}'))
                break;
            if(contor%2==0)
                {
                    delete_uselessstuff(p);
                    fprintf(g,"%s,",p);
                }

        }


    }while(strstr(c,"}")==NULL);

    //printf("\n");
    fseek(f,0L,SEEK_SET);
}

void extract_columns(FILE* f, FILE* g)
{
    char* p;
    char copie[1025],c[1025];
    int contor=0;
    do
    {
        fgets(c,1025,f);
        delete_enter(c);
        delete_spaces(c);
        delete_quotations(c);
        strcpy(copie,c);
        //printf("%s\n",copie);
        if(strchr(copie,':') || strlen(copie)>3 && strcmp(copie,":") && strcmp(copie,","))
        for(p=strtok(copie,":,");p;p=strtok(NULL,":,"),contor++)
        {
            if(strchr(p,'{'))
                fprintf(g,"\n");
            if(contor%2==1)
                {
                    delete_uselessstuff(p);
                    fprintf(g,"%s,",p);
                }

        }
        else
            if(strstr(copie,"{"))
                fprintf(g,"\n");


    }while(strstr(c,"]")==NULL);
}
int main()
{
    FILE* f;
    FILE *g;
    f=fopen("convertor.in","rt");
    g=fopen("convertor.out","wt");
    extract_header(f,g);
    extract_columns(f,g);

    return 0;
}