题目链接:​​https://www.luogu.com.cn/problem/P1928​

后缀表达式模板题。

示例程序:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 20020;
char s[maxn];
int n;
stack<int> stk_num;
stack<string> stk_str;

int main() {
cin >> s;
n = strlen(s);
stk_num.push(1);
stk_str.push("");
for (int i = 0; i < n;) {
if (s[i] == '[') {
int num = s[i+1] - '0';
if (i+2 < n && isdigit(s[i+2])) {
num = num * 10 + s[i+2] - '0';
i += 3;
}
else i += 2;
stk_num.push(num);
stk_str.push("");
}
else if (s[i] == ']') {
int num = stk_num.top();
stk_num.pop();
string str = stk_str.top();
stk_str.pop();
string tmp = "";
for (int i = 0; i < num; i ++) tmp += str;
stk_str.top() += tmp;
i ++;
}
else {
stk_str.top() += s[i++];
}
}
cout << stk_str.top() << endl;
return 0;
}