分析:直接就这么翻肯定是不行的,换一种想法:有括号就是把括号里的字符串倒着输出,如果在括号里又遇到了括号就继续倒着输出,相当于递归.
我们可以用递归直接做,也可以用一层循环搞定,每次从左括号跳到右括号,再从右括号跳到左括号,之后走一步,就能输出处理后的字符串了,而不会死循环了.
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; char s[];
int tot, pipei[], nextt[], x, dir; int main()
{
scanf("%s", s + );
int sizee = strlen(s + );
for (int i = ; i <= sizee; i++)
{
if (s[i] == '(')
pipei[++tot] = i;
else
if (s[i] == ')')
{
nextt[i] = pipei[tot];
nextt[pipei[tot--]] = i;
}
}
dir = , x = ;
while (x >= && x <= sizee)
{
if (nextt[x])
{
x = nextt[x];
dir = -dir;
}
else
printf("%c", s[x]);
x += dir;
} return ;
}