问题描述
字母按照一定规律解码。
类似如下情况:
input:ss(yuanfudao)2(good)2
output:ssyuanfudaoyuanfudaogoodgood
input:(s(o)2)2
output:soosoo
input:(e(r(t(w)3)2)2)2good2
output:ertwwwtwwwrtwwwtwwwertwwwtwwwrtwwwtwwwgoodd
这里我采用了递归的方法。
C++代码
void yuanfudao::question_1()
{
int num;
cin >> num;
vector<string> words;
for (int i = 0; i < num; i++)
{
string temp;
cin >> temp;
words.push_back(temp);
}
int x = 0;
while (x < num)
{
string s = words[x];
string result = change(0, s);
cout << result << endl;
x++;
}
system("pause");
}
string yuanfudao::change(int multi, string s)
{
int n = s.size();
string result;
vector<int> num;
int i= 0;
while (i<n)
{
num.clear();
while (i<n&&s[i] != '('&&s[i] > '9')
result.push_back(s[i++]);
int start = i - 1;
while (i < n&&s[i] != '('&&s[i]<='9'&&s[i]>='0')
num.push_back(s[i++] - '0');
int sum = 0;
for (int j = 0; j < num.size(); j++)
sum = (sum * 10) + num[j];
for (int j = 0; j < sum - 1; j++)
result.push_back(s[start]);
if (s[i] != '(')
continue;
else
{
int begin = i;
stack<char> stack1;
stack1.push(s[i]);
while (i < n && !stack1.empty())
{
i++;
if (s[i] == ')')
stack1.pop();
if (s[i] == '(')
stack1.push(s[i]);
}
int end = i;
num.clear();
sum = 0;
i++;
while (i < n&&s[i]<='9'&&s[i]>='0')
num.push_back(s[i++] - '0');
for (int j = 0; j < num.size(); j++)
sum = (sum * 10) + num[j];
string sub = s.substr(begin + 1, end - begin-1);
result = result + change(sum, sub);
continue;
}
}
string tmp = result;
for (int k = 0; k < multi-1; k++)
result = result + tmp;
return result;
}
int main()
{
yuanfudao demo;
demo.question_1();
}