问题:判断算术表达式的括号是否匹配,例如:2+{(5-1)*4-[3-5]*3}匹配,2+{(5-1)*4-3-5]*3}不匹配。
思路:出现右括号需与离其最近的左括号进行匹配。遇到左括号进栈,遇到右括号,若栈不为空,栈顶元素出栈,并判断其是否与对应的左括号一致。
代码:
#include<iostream>
#include<stack>
#include<string>
using namespace std;
bool isMatch(string str)
{
stack<char> bracket;
int len=str.length();
for(int i=0;i<len;i++)
{
switch(str[i]){
case '(':
case '[':
case '{':
bracket.push(str[i]);
break;
case ')':
if(!bracket.empty()&&bracket.top()=='(')
{
bracket.pop();
}
else
return false;
break;
case ']':
if(!bracket.empty()&&bracket.top()=='[')
{
bracket.pop();
}
else
return false;
break;
case '}':
if(!bracket.empty()&&bracket.top()=='{')
{
bracket.pop();
}
else
return false;
break;
}
}
return bracket.empty();
}
int main()
{
string str;
cout<<"Please input the char: "<<endl;
getline(cin,str);
cout<<str<<endl;
if(isMatch(str))
cout<<"This is match!"<<endl;
else
cout<<"This is not match!"<<endl;
return 0;
}