【题目描述】

有一种字符串压缩编码:
普通的小写字母原样表示自身;
k[s] 表示把括号内的内容 s 重复 k 次,其中 k 是正整数(可能是多位数);
编码可以嵌套,例如 3[a2[c]] 解码为 accaccacc。
给定一个编码串,请输出解码后的字符串。
【输入格式】
一行一个字符串,表示编码串。由小写字母、数字、[、] 组成,保证格式合法:数字只出现在 [ 之前,括号正确配对。
【输出格式】
一行一个字符串,表示解码结果。
【样例输入 #1】

3[a2[c]]

【样例输出 #1】

accaccacc

【样例输入 #2】

2[abc]3[cd]ef

【样例输出 #2】

abcabccdcdcdef

【数据范围与约定】

测试点 编码串长度 解码结果长度
1~10 ≤ 20 ≤ 500
11~16 ≤ 60 ≤ 500
17~19 ≤ 110 ≤ 10 000
20 91 1(30 层嵌套)
【提示】
第 20 组虽然只有 91 个字符,但括号嵌套深度达到 30 层。

#include <bits/stdc++.h>

using namespace std;

string s, ans;
stack<string> str;
stack<int> sn;
int x;

void wk(int x)
{
    string kkksc03 = str.top();
    str.pop();
    string res;
    while (x--)
    {
        res += kkksc03;
    }
    if (!str.empty())
    {
        str.top() += res;
    } 
    else
    {
        str.push(res);
    }
}

int main()
{
    cin >> s;
    str.push("");
    for (int i = 0; i < s.size(); i++)
    {
        if (isdigit(s[i]))
        {
            x = x * 10 + (s[i] - '0');
        }
        else
        {
            string t;
            switch (s[i])
            {
                case '[':
                sn.push(x);
                x = 0;
                str.push("");
                break;
                case ']':
                wk(sn.top());
                sn.pop();
                break;
                default:
                t = s[i];
                str.top() += t;
            }
        }
    }
    ans = str.top();
    cout << ans;
    return 0;
}