题目描述
给定一个字符串,字符串包含数字、大小写字母以及括号(包括大括号,中括号,小括号),括号可以嵌套,即括号里面可以出现数字和括号。
按照如下规则对字符串进行展开,不需要考虑括号不成对的问题,不考虑数字后面没有括号的情况,即 2a2(b)不考虑。
数字表示括号里的字符串重复的次数,展开后的字符串不包含括号
将字符串进行逆序展开
输入abc2{de3[fg]}
输出gfgfgfedgfgfgfedcba
#include <iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<stack>
using namespace std;
int main()
{
string str;
while (cin >> str)
{
string res = "";
stack<char> 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;
}