题目描述
给定一个字符串,字符串包含数字、大小写字母以及括号(包括大括号,中括号,小括号),括号可以嵌套,即括号里面可以出现数字和括号。
按照如下规则对字符串进行展开,不需要考虑括号不成对的问题,不考虑数字后面没有括号的情况,即 2a2(b)不考虑。
数字表示括号里的字符串重复的次数,展开后的字符串不包含括号
将字符串进行逆序展开
输入abc2{de3[fg]}
输出gfgfgfedgfgfgfedcba
#include#include #include #include #include using namespace std; int main() { string str; while (cin >> str) { string res = ""; stack st; int len = str.size(); for (int i = 0; i < len; i++) { if (str[i] == ')' || str[i] == ']' || str[i] == '}') { string tmp = ""; while (!(st.top() == '(' || st.top() == '[' || st.top() == '{')) { tmp += st.top(); st.pop(); } reverse(tmp.begin(), tmp.end()); st.pop(); string numTmp = ""; while (!st.empty() && st.top() >= '0' && st.top() <= '9') { numTmp += st.top(); st.pop(); } reverse(numTmp.begin(), numTmp.end()); int num = stoi(numTmp); string newStr = ""; while (num--) { newStr += tmp; } for (int j = 0; j < newStr.size(); j++) { st.push(newStr[j]); } } else { st.push(str[i]); } } while (!st.empty()) { res += st.top(); st.pop(); } cout << res << endl; } return 0; }



