问答题
设算术表达式由字符串b表示,其中可以包括三种括号:圆括号、方括号以及花括号,嵌套的顺序随意,如:“{[( )]( )}”。试编写算法,实现判定给定表达式中所含括号是否正确配对的出现。
【正确答案】
【答案解析】设tag为括号是否正确配对的标志,用0表示不正确的配对,1表示正确的配对。另设一个栈S。若当前处理字符为左括号,就将对应的右括号进栈。当遇到右括号时,直接与栈顶元素进行比较,若相等,则退栈;否则返回不正确配对标志。当整个算术表达式检测完毕且栈为空时,表示括号正确配对,否则括号不正确配对。算法描述如下:
#define MAX 1000
int JudgeExp(char*b)
{
char S[MAX];
inti,top=0,tag=1;
for(i=0;tag && b[i]!='/0';i++)
{
switch(b[i])
{
case'(':s[top++]=')';break;
case'[':S[top++]=']';break;
case'{':S[top++]='}; break;
case')':
case']':
case'}':
if(top==0 || b[i]!=S[--top])
tag=0;
break:
}
}
return top==0 && tag && b[i]=='/0';
}