Informatică, întrebare adresată de tudosaeduard12oz9v1x, 8 ani în urmă

Se consideră următorul model (pattern): n[string] care este echivalent cu șirul (string)(string)...(string) (string repetat de de n ori). Pornind de la acest model orice șir de caractere poate fi codificat.

Exemple :

Șir codificat Șir decodificat
1[a] a
2[ab] abab
2[a2[b]] abbabb
3[b2[ca]] bcacabcacabcaca
Cerința
Fiind dat un șir de caractere corect codificat să se afișeze decodificarea acestuia.

Date de intrare
Programul citește de la tastatură un șir de caractere S corect codificat.

Date de ieșire
Programul va afișa pe ecran un șir de caractere ce va reprezenta decodificarea șirului S.

Restricții și precizări
3 ≤ lungimea șirului S ≤ 1000
lungimea șirului decodificat ≤ 100000
șirul S va conține doar caractere literă mică ale alfabetului englez



Exemplu
Intrare

3[a1[b2[c]]]
Ieșire

abccabccabcc
Intrare

3[a2[c]]2[x3[y]]
Ieșire

accaccaccxyyyxyyy

Răspunsuri la întrebare

Răspuns de Daniel4761
4

#include <iostream>

#include <string>

using namespace std;

int main()

{

char pattern[256], modelul[256], nr[3], sir[50], text[100];

int i, j, numar, paranteze=0, p1, p2, pnr, x;

cout<<"pattern:"; cin>>pattern;

for(i=0;i<strlen(pattern);i++)

 if(pattern[i]=='[' || pattern[i]==']')

  paranteze++;

while(paranteze){

 p1=0; p2=0;

 for(i=0;i<strlen(pattern);i++)

  if(pattern[i]=='['){

   p1++;

   if(p1==paranteze/2){

    p1=i; break;

   }

  }

 for(i=p1;i<=strlen(pattern);i++)

  if(pattern[i]==']'){

   p2=i; break;

  }

 i=p1-1;

 while(pattern[i]>='0' && pattern[i]<='9' && i>0)

  i--;

 if(i==0) pnr=0;

 else pnr=i+1;

 x=0;

 if(i==0) i=-1;

 for(j=i+1;j<p1;j++){

  nr[x]=pattern[j]; x++;}

 nr[x]='\0';

 numar=atoi(nr);

 x=0;

 for(i=p1+1;i<p2;i++){

  sir[x]=pattern[i]; x++;

 }

 sir[x]='\0';

 numar--;

 strcpy(text,pattern+p2+1);

 while(numar){

  numar--;

  strcpy(pattern+p2,sir);

  p2=p2+strlen(sir);

 }

 strcpy(pattern+p2,text);

 strcpy(pattern+pnr,pattern+p1+1);

 paranteze=paranteze-2;

}

cout<<pattern;

return 0;

}


Daniel4761: coroana?
Alte întrebări interesante