Proszę o pomoc, bo sama nie jestem w stanie tego rozwiązać.
Zadanie z C++.
Proszę napisać funkcję, która otrzymawszy skompresowany string zwróci rozpakowany tekst. Dane wejściowe są spakowane przy pomocy wyrażeń N[PackedString]. Przy rozpakowaniu, znajdujący się w nawiasach kwadratowych PackedString, jest powtarzany N razy. Proszę zauważyć, że N to liczba całkowita większa od zera. np. wywołanie z „2[a]3[bc]”, zwraca „aabcbcbc”, wywołanie z „fg2[eset]3[hi]”, zwraca ” fgesetesethihihi”.



Odpowiedź :

Odpowiedź:

#include <iostream>

#include <string>

string unpack(string s) {

string unpacked;

int i = 0;

while (i < s.length()) {

 if (s[i] >= '0' && s[i] <= '9') {

  int sp = s.find('[', i); // start of PackedString

  int ep = s.find(']', i); // end of PackedString

  string str = s.substr(i, sp - i);

  int n = stoi(str);  // number of repetitions

  str = s.substr(sp + 1, ep - sp - 1); // get the string

  for (int j = 0; j < n; j++) {

   unpacked += str; // add the string n times

  }

  i = ep + 1;  // move i to the end of the string

 }

 else {

  unpacked += s[i]; // add any other character

  i++;

 }

}

return unpacked;

}

Zobacz obrazek KiciakToes