详解括号匹配问题(STL stack)

1. 括号匹配的四种可能性:①左右括号配对次序不正确②右括号多于左括号③左括号多于右括号④左右括号匹配正确2. 算法思想:1.顺序扫描算数表达式(表现为一个字符串),当遇到三种类型的左括号时候让该括号进栈;2.当扫描到某一种类型的右括号时,比较当前栈顶元素是否与之匹配,若匹配,退栈继续判断;3.若当前栈顶元素与当前扫描的括号不匹配,,则左右括号配对次序不正确,匹配失败,直接退出;4.若字符串当前为某种类型的右括号而堆栈已经空,则右括号多于左括号,匹配失败,直接退出;5.字符串循环扫描结束时,若堆栈非空(即堆栈尚有某种类型的左括号),则说明左括号多于右括号,匹配失败;

6.正常结束则括号匹配正确。

#include<iostream>#include<stack>using namespace std;bool Match(char *p){stack<char>s;while(*p){if((*p=='{‘)||(*p=='[‘)||(*p=='(‘)){s.push(*p); p++;}else{if(s.empty())//若没有词句,若右括号多于左括号将会产生错误,因为p将指向非法区域,*p就将错误return false;if(s.top()=='{‘&&*p==’}’||s.top()=='[‘&&*p==’]’||s.top()=='(‘&&*p==’)’){s.pop();p++;}elsereturn false;//p++;}}if(!s.empty())return false;elsereturn true;}int main(){char s[10];cin>>s; if(Match(s))cout<<"kuohao is match!"<<endl;else cout<<"Not Match!"<<endl;return 0;}

何不去远方!昆明呀——赶一个花海;

详解括号匹配问题(STL stack)

相关文章:

你感兴趣的文章:

标签云: