Cod sursa(job #2074481)

Utilizator crastanRavariu Eugen crastan Data 24 noiembrie 2017 17:30:53
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.78 kb
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
ifstream fin("dir.in");
ofstream fout("dir.out");
int i,l,j,nrfold=0,nrcai=0;
char s[1610],fold[100][32],cai[105][257],backslash[3];
void wordsort(int st,int dr,char sir[105][257])
{
    char m[257];
    strcpy(m,sir[(st+dr)/2]);
    int i=st,j=dr;
    while(i<=j)
    {
        while(strcmp(sir[i],m)<0&&i<=dr) i++;
        while(strcmp(m,sir[j])<0&&j>=st) j--;


char aux[105];
        if(i<=j)
        {
            strcpy(aux,sir[i]);
            strcpy(sir[i],sir[j]);
            strcpy(sir[j],aux);
            i++;j--;
        }
    }
    if(i<dr)
        wordsort(i,dr,sir);
    if(j>st)
        wordsort(st,j,sir);
}

int main()
{backslash[0]=92;
    fin>>s;
    l=strlen(s);
    for(i=l-1;i>=0;i--)
        s[i+2]=s[i];
    s[0]='X';
    s[1]='(';
    l+=3;
    s[l-1]=')';
    for(i=0;i<=l-1;i++)
    {   if(s[i]==')'){nrfold--;}
        if(s[i]==',') i++;
        if(s[i]>='A'&&s[i]<='Z')
        {
            j=1;
            nrfold++;
            while(s[j+i]!='(') j++;
            strncpy(fold[nrfold],s+i,j);
            fold[nrfold][j]='\0';
            i+=j;
        }
        else
        if(s[i]>='a'&&s[i]<='z')
        {
            nrcai++;
            for(j=1;j<=nrfold;j++)
            {
                strcat(cai[nrcai],fold[j]);
                strcat(cai[nrcai],backslash);
            }
            j=1;
            while(s[j+i]!=')'&&s[j+i]!=',') j++;
            strncat(cai[nrcai],s+i,j);
            i+=j-1;
    //        cout<<cai[nrcai]<<endl;
        }
    }
    //for(i=1;i<=nrcai;i++)
    //fout<<cai[i]<<endl;
    fout<<nrcai<<'\n';
  //  wordsort(1,nrcai,cai);
    for(i=1;i<=nrcai;i++)
        fout<<cai[i]+2<<'\n';
}