问题描述:
假设一个算术表达式中可以包含三种括号:圆括号“()”,方括号“【】”及花括号“{}”,且这三种括号可以任意次序嵌套。编写算法判断给定表达式中所含括号是否配对出现。
解答:
假设表达式已存入字符数组A【n】中,具体算法如下:
#include <iostream>
using namespace std;
char S[99];//栈保存{,(,[
int top;
int flag;
int Prool(char A[],int n)//匹配算法
{
top=-1;
int i=0;
flag=1;
while(i<n&&flag)
{
if(A[i]=='('||A[i]=='['||A[i]=='{')
S[++top]=A[i];
else
{
switch(A[i])
{
case ')':
if(top==-1||S[top--]!='(')
flag=0;
break;
case ']':
if(top==-1||S[top--]!='[')
flag=0;
break;
case '}':
if(top==-1||S[top--]!='{')
flag=0;
break;
}
}
if(top!=-1&&i==n-1)//判断类似[[[[]]的情况
flag=0;
i++;
}
return flag;
}
int main()
{
int n;
while(cin>>n)
{
getchar();
char *A=new char[n];
int i;
for( i=0;i<n;i++ )
cin>>A[i];
int ret=Prool(A,n);
cout<<"ret:"<<ret<<endl;
if(ret)
cout<<"right"<<endl;
else
cout<<"error"<<endl;
delete []A;
}
return 0;
}