您的位置:首页 > 其它

栈的应用:括号匹配

2015-03-10 22:08 225 查看
问题:判断算术表达式的括号是否匹配,例如: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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: