Advertisement
OIQ

Untitled

OIQ
Oct 10th, 2021
871
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.94 KB | None
  1. #include <iostream>
  2. #include <string>
  3.  
  4. template <class T>
  5. class Stack{
  6.  private:
  7.     T *array;
  8.     int capacity;
  9.     int index;
  10.  
  11.     void Expand() {
  12.         T *newArray = new T[capacity * 4];
  13.         for (int i = 0; i < capacity; i++) {
  14.             newArray[i] = array[i];
  15.         }
  16.         delete[] array;
  17.  
  18.         capacity *= 4;
  19.         array = newArray;
  20.     }
  21.  
  22.  public:
  23.     Stack() {
  24.         array = new T[10];
  25.         capacity = 8;
  26.         index = 0;
  27.     }
  28.  
  29.     void push(T n) {
  30.         if (capacity == index) {
  31.             Expand();
  32.         }
  33.         array[index++] = n;
  34.     }
  35.  
  36.     T pop() {
  37.         return array[--index];
  38.     }
  39.  
  40.     T back() {
  41.         return array[index - 1];
  42.     }
  43.  
  44.     int size() {
  45.         return index;
  46.     }
  47.  
  48.     void clear() {
  49.         delete[] array;
  50.  
  51.         capacity = 8;
  52.         array = new T[capacity];
  53.         index = 0;
  54.     }
  55.  
  56.     bool empty() {
  57.         return index == 0;
  58.     }
  59.  
  60.     ~Stack() {
  61.         delete[] array;
  62.         index = 0;
  63.         capacity = 0;
  64.     }
  65. };
  66.  
  67. std::string times_string(const std::string &str, int n) {
  68.     std::string result;
  69.     for (int i = 0; i < n; i++) {
  70.         result += str;
  71.     }
  72.  
  73.     return result;
  74. }
  75.  
  76. void unpacking(const std::string &str) {
  77.     Stack<std::string> stack;
  78.     Stack<int> numbers;
  79.     stack.push("");
  80.  
  81.     for (char c : str) {
  82.         if (c == '[') {
  83.             stack.push("");
  84.         } else if (c == ']') {
  85.             std::string str_times = times_string(stack.pop(), numbers.pop());
  86.             std::string prev = stack.pop() + str_times;
  87.             stack.push(prev);
  88.         } else if (c >= 'a' && c <= 'z') {
  89.             std::string prev = stack.pop() + c;
  90.             stack.push(prev);
  91.         } else {
  92.             numbers.push(c - '0');
  93.         }
  94.     }
  95.  
  96.     std::cout << stack.pop();
  97. }
  98.  
  99.  
  100. int main() {
  101.     std::string str;
  102.     std::cin >> str;
  103.  
  104.     unpacking(str);
  105.  
  106.     return 0;
  107. }
  108.  
Advertisement
RAW Paste Data Copied
Advertisement