Aquí tractem amb expressions regulars simplificades, les quals codifiquen paraules. En el que segueix, sigui una paraula no buida formada només amb lletres minúscules, sigui un dígit entre 1 i 9, i sigui una seqüència no buida d’expressions regulars. Una expressió regular pot ser:
[]
: codifica
còpies de
.
[]
: codifica
còpies de la concatenació de les codificacions de
,
…,
.
Diversos exemples:
1[hola] codifica hola.
3[hi] codifica hihihi.
1[1[hola]3[hi]] codifica
holahihihi.
2[1[hola]3[hi]] codifica
holahihihiholahihihi.
Com podeu veure als exemples d’entrada, aquesta definició recursiva
permet que hi hagi tants nivells com es vulgui de [ ...
].
L’entrada consisteix en diverses expressions regulars.
Escriviu la paraula codificada per cada expressió regular donada.
Si i són strings, i és un caràcter, aquestes operacions són vàlides:
s += t; // afegeix una copia de t a la dreta d's
s += c; // afegeix una copia de c a la dreta d's
La solució esperada és recursiva. El main() només
conté:
char c;
while (cin >> c) cout << expressio(c) << endl;
Input
1[hola] 3[hi] 1[1[hola]3[hi]] 2[1[hola]3[hi]] 2[1[a]3[bc]] 2[2[1[x]2[y]]] 1[1[2[a]1[b]3[c]]2[3[1[d]2[e]]1[f]]] 9[y] 2[2[2[2[2[z]]]]]
Output
hola hihihi holahihihi holahihihiholahihihi abcbcbcabcbcbc xyyxyyxyyxyy aabcccdeedeedeefdeedeedeef yyyyyyyyy zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz