fbpx

Problema #850 – Repetitii – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

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ă.

Date de intrare

Programul citește de la tastatură șirul s, în forma condensată.

Date de ieșire

Programul va afișa pe ecran șirul t, în forma inițială.

Restricții și precizări

  • lungimea șirurilor s și t nu depășește 255 caractere
  • șirul condensat nu va conține paranteze în alte paranteze

Exemplu

Intrare

(ma)2(te)3r

Ieșire

mamateteter
#include <bits/stdc++.h>
using namespace std;

bool cifra(char ch)
{
    return ch >= '0' && ch <= '9';
}

int main()
{
    char s[300] , cuv[300];
    cin >> s;
    int i = 0 , j = -1;
    while(s[i]!='\0')
    {
        if(s[i]=='(')
            j=0;
        else if(s[i]==')')
        {
            i++;
            int n=0;
            while(cifra(s[i]))
                n=n*10+((int)s[i]-48) , i++;
            i--;
            for(int q = 0 ; q < n ; ++q)
                for(int k = 0 ; k < j ; ++k)
                    cout << cuv[k];
            j=-1;
        }
        else if(j!=-1)
            cuv[j]=s[i] , j++;
        else
            cout << s[i];
        i++;
    }
    return 0;
}
Comentarii

S-ar putea sa iti placa