Cod sursa(job #1357580)

Utilizator miahiFMI Honceriu Mihai miahi Data 23 februarie 2015 23:28:30
Problema Convertor Scor 10
Compilator cpp Status done
Runda rosedu_cdl_2015 Marime 4.37 kb
#include<iostream>
#include<fstream>
#include<cstring>
#include<vector>
#include<ctype.h>
using namespace std;
bool isempty(char a[1024])
{
    int i;
    for(i=0;i<strlen(a);i++)
        if(a[i]!=' ')
            return false;
    return true;
}
int main()
{
    ifstream f("convertor.in");
    ofstream g("convertor.out");
    char a[1024],b[1024];
    char tags[1024][1024];
    int k=1,t=0,var,i,tagsCount=0;
    while(t==0)
    {
        f.getline(a,1024);
        if(strchr(a,'}'))
            t=1;
        i=0;
        while(a[i]!='\0')
            {
                if(a[i]=='}')
                    break;
                else
                    if(a[i]=='"')
                    {
                        if(k==0)
                            goto kappa;
                        k=0;
                        var=i;
                        i++;
                        while(a[i]!='"')
                        {
                            b[i-var-1]=a[i];
                            i++;
                        }
                        b[i-var-1]='\0';
                        strcpy(tags[tagsCount],b);
                        tagsCount++;
                        kappa:
                        while(a[i]!=','&&a[i]!='\0')
                        {
                            i++;
                            if(a[i]==',')
                                k=1;
                            if(a[i]=='}')
                                break;
                        }
                    }
                    else
                        i++;
                }
    }
    for(i=0;i<tagsCount;i++)
        g<<tags[i]<<",";
    g<<"\n";
    f.clear();
    bool fin;
    f.seekg(0,f.beg);
    while(!f.eof())
    {
        if(!isempty(a))
            strcpy(b,a);
        f.getline(a,1024);
        for(i=0;i<strlen(a);i++)
        {
            if(!strchr(a,',')&&!strstr(a,tags[tagsCount-1]))
            {

            }
            if(a[i]==']')
                goto jump;
            if(a[i]==','&&(a[i-1]=='"'||isdigit(a[i-1])||a[i-1]=='}'))
            {
                fin=false;
                int var;
                if(a[i-1]=='"')
                {
                    var=i-1;
                    i=i-2;
                    while(a[i-1]!='"'&&i!=0)
                        i--;
                }
                if(isdigit(a[i-1]))
                {
                    var=i;
                    i--;
                    while(isdigit(a[i-1]))
                        i--;
                }
                if(a[i-1]=='}')
                {
                    jump:
                    i=i-2;
                    fin=true;
                    while(!isdigit(a[i])&&a[i]!='"')
                        i--;
                    var=i;
                    if(isdigit(a[i]))
                    {
                        while(isdigit(a[i-1]))
                            i--;
                    }
                    else
                    {
                        i=i-1;
                        while(a[i-1]!='"'&&i!=0)
                            i--;
                    }
                    if(i==var)
                        {
                            int j=strlen(b)-1;
                            if(isdigit(b[j]))
                            {
                                while(isdigit(b[j-1]))
                                    j--;
                                while(isdigit(b[j]))
                                {
                                    g<<b[j];
                                    j++;
                                }
                            }
                            if(b[j]=='"')
                            {
                                while(b[j-1]!='"')
                                    j--;
                                while(b[j]!='"')
                                {
                                    g<<b[j];
                                    j++;
                                }
                            }
                        }
                }
                for(;i<var;i++)
                    g<<a[i];
                i++;
                g<<",";
                if(fin==true)
                {
                    g<<"\n";
                    i=i+3;
                }
            }
        }
    }
}