👤

Se consideră un șir de caractere format numai din litere mici ale alfabetului englez. Dacă șirul conține subșiruri consecutive care se repetă, el poate fi scris condensat. De exemplu, șirul mamateteter poate fi scris (ma)2(te)3r – subșirul care se repetă se scrie între paranteze rotunde, urmat de numărul de apariții.

Dându-se un șir în forma condensată, să se determine șirul în forma inițială.


Răspuns :

#include <iostream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

using namespace std;
int i,contor=0,contor2=0,k=0;
char a;
string condensat,necondensat;
int main()
{
    cout << "introduceti sirul dorit: ";
    cin>>condensat;
     for(i=0;i<condensat.size();i++)
     {
         if(condensat[i]=='(')
            contor++;
         if(condensat[i]==')')
            contor++;
     }
     int pozitii[contor];
     for(i=0;i<condensat.size();i++)
     {
         if(condensat[i]=='(')
         {
             pozitii[contor2]=i;
             contor2++;
         }
         if(condensat[i]==')')
         {
             pozitii[contor2]=i;
             contor2++;
         }
     }
     for(i=0;i<contor/2;i++)
     {
         if(isdigit(condensat[pozitii[k+1]+1]))
         {
             string a=condensat.substr(pozitii[k+1]+1,1);
             for(int j=0;j<atoi(a.c_str());j++)
             {
                 necondensat+=condensat.substr(pozitii[k]+1,pozitii[k+1]-pozitii[k]-1);
             }
         }
         else
         {
             necondensat+=condensat.substr(pozitii[k]+1,pozitii[k+1]-pozitii[k]-1);
         }
         k+=2;
     }
     cout<<necondensat;
    return 0;
}
Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Ne dorim ca informațiile furnizate să vă fi fost utile. Dacă aveți întrebări sau aveți nevoie de suport suplimentar, nu ezitați să ne contactați. Revenirea dumneavoastră ne bucură, iar pentru acces rapid, adăugați-ne la favorite!


Ze Lesson: Alte intrebari