//输入字符串压缩时格式为: AB[2|ABC]
//输出字符串解压后格式: ABABCABC
#include <iostream>
#include <string>
#include <string.h>
#include <queue>
using namespace std;
int main() {
string s;
cin >> s;
int j = s.length();
vector<char>s2;
string ans = "";
char l = '0'; //左边,用以记录'['
char m = '0'; //中间,用以记录'|'
int k2 = 0; //记录|前面的那个数。
for (int i = 0; i < j; i++) {
if (s[i] == '[') {
l = '['; continue;
}
else if (s[i] == '|') {
m = '|'; continue;
}
else if (s[i] == ']') {
l = '0'; m = '0';
int j3 = s2.size();
for (int i2 = 0; i2 < k2; i2++) {
for (int i3 = 0; i3 < j3; i3++) {
ans = ans + s2[i3];
}
}
s2.clear(); k2 = 0;
}
else if (s[i] > '0' && s[i] <= '9') {
k2 = k2 * 10 + ((int)s[i] - 48);
}
else if (l == '[' && m == '|') {
s2.push_back(s[i]);
}
else {
ans = ans + s[i];
}
}
cout << ans;
return 0;
}
大体思路是先把可能的边界情况给处理好,这貌似是写代码的一个“规矩”?然后再去处理常规的情况。