写一个函数,检查一个表达式中的括号是否合法,括号包括{},[],()。
思路:用栈,每次找到关键字是括号的时候,检查栈顶元素是否为匹配的括号。如果是匹配的,栈顶元素出栈,否则新的括号入栈。检查所有的括号元素后,如果此时栈为空,则表达式正确,否则表达式错误。
#include <iostream>
#include<stack>
#include<cstring>
using namespace std;
stack <char> array;
int pipei(char str[],int len)
{
int i;
for(i=0;i<len;i++)
{
if(str[i]=='('||str[i]=='['||str[i]=='{')
array.push(str[i]);
if(str[i]==')'||str[i]==']'||str[i]=='}')
{
if(array.empty())//如果表达式的第一个是右括号,则错误
return -1;
else
{
if(array.top()=='('&&str[i]==')')
array.pop();
else if(array.top()=='['&&str[i]==']')
array.pop();
else if(array.top()=='{'&&str[i]=='}')
array.pop();
else
return -1;
}
}
}
if(array.empty())
return 0;
else
return -1;
}
int main()
{
char str[100]=")+[2+(4+5)]+{(3+4)*7";
int len = strlen(str);
int result = pipei(str,len);
if(result==0)
cout<<"成功匹配"<<endl;
//cin>>str;
if(result==-1)
cout<<"匹配失败"<<endl;
return 0;
}