#include<stdio.h>
#include<stack>
using namespace std;
#include<string.h>
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
char g[310];
stack<char> f;
stack<int> num;
scanf("%s",g);
int len=strlen(g);
for(int i=0;i<len;i++)
{
if(g[i]=='(')
{
f.push(g[i]);
}
else if(g[i]>='0'&&g[i]<='9')
{
int v=0;
while(g[i]>='0'&&g[i]<='9')
{
v=v*10+(g[i]-'0');
i++;
}
i--;
num.push(v);
}
else if(g[i]=='d'&&g[i-1]=='d'||g[i]=='n'||g[i]=='x')
{
f.push(g[i]);
}
else if(g[i]==')')
{
if(f.top()=='(')
{
f.pop();
if(f.top()=='d'||f.top()=='n'||f.top()=='x')
{
int a=num.top();num.pop();
int b=num.top();num.pop();
int c;
switch(f.top())
{
case 'd':
c=a+b;
break;
case 'x':
if(a>b)
c=a;
else
c=b;
break;
case 'n':
if(a<b)
c=a;
else
c=b;
break;
}
num.push(c);
f.pop();
}
}
}
else if(g[i]==',')
{
continue;
}
}
printf("%d\n",num.top());
num.pop();
}
return 0;
}
定义两个栈 分别储存字符与数据
循环判定 进行栈操作
最终得出结果