/* 括号匹配问题,比较经典,利用堆栈来实现(摘自internet) 1. 括号匹配的四种可能性: ①左右括号配对次序不正确 ②右括号多于左括号 ③左括号多于右括号 ④左右括号匹配正确 2. 算法思想: 顺序扫描算数表达式(表现为一个字符串),当遇到三种类型的左括号时候让该括号进栈; 当扫描到某一种类型的右括号时,比较当前栈顶元素是否与之匹配,若匹配,退栈继续判断; 若当前栈顶元素与当前扫描的括号不匹配,则左右括号配对次序不正确; 若字符串当前为某种类型的右括号而堆栈已经空,则右括号多于左括号; 字符串循环扫描结束时,若堆栈非空(即堆栈尚有某种类型的左括号),则说明左括号多于右括号; 否则,括号配对正确。 3. 程序实现: */ #include <iostream> using namespace std; #define maxsize 100 struct sStack { char sign[maxsize]; int top; }; int InitsStack(sStack &SS) { SS.top=-1; return 1; } int IsEmptysStack(sStack &SS) { if(SS.top==-1) return 1; return 0; } int PushsStack(sStack &SS,char c) { SS.sign[++SS.top]=c; return 1; } int UpsStack(sStack &SS) { if(IsEmptysStack(SS)) { cout<<"栈空"<<endl; return 0; } SS.top--; return 1; } char TopsStack(sStack &SS) { if(IsEmptysStack (SS)) { cout <<"栈空"<<endl; return 0; } return SS.sign[SS.top]; } int main() { string s; cout<<"输入表达式:"; cin>>s; int length=s.length(); int i; sStack SS; InitsStack(SS); for(i=0;i<length;++i) { if(s[i]=='('||s[i]=='['||s[i]=='{') PushsStack(SS,s[i]); else if(s[i]==')'&&!IsEmptysStack(SS)&&TopsStack(SS)=='(') UpsStack(SS); else if(s[i]==')'&&!IsEmptysStack(SS)&&TopsStack(SS)!='(') cout<<"括号匹配次序不正确"<<endl; else if(s[i]==']'&&!IsEmptysStack(SS)&&TopsStack(SS)=='[') UpsStack(SS); else if(s[i]==']'&&!IsEmptysStack(SS)&&TopsStack(SS)!='[') cout<<"括号匹配次序不正确"<<endl; else if(s[i]=='}'&&!IsEmptysStack(SS)&&TopsStack(SS)=='{') UpsStack(SS); else if(s[i]=='}'&&!IsEmptysStack(SS)&&TopsStack(SS)!='{') cout<<"括号匹配次序不正确"<<endl; else if((s[i]==')'||s[i]==']'||s[i]=='}')&&IsEmptysStack(SS)) cout<<"右括号多于左括号"<<endl; } if(!IsEmptysStack(SS)) cout<<"左括号多于右括号"<<endl; else if(i=(length-1)&&IsEmptysStack(SS)) cout<<"括号匹配正确"<<endl; system("PAUSE"); return 0; }
括号匹配问题(C++、堆栈)
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
下一篇:手写PE文件(一)

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
栈括号匹配问题(C++实现)
使用栈解决括号匹配问题。主要的点在于简化处理逻辑,有些不必要处理的字符就不需要入栈,只对三种括号字符入栈。
算法 字符串 #include 入栈 ios -
[C++] 括号匹配
括号匹配
括号匹配 出栈 #define -
C++ 栈的括号匹配
总结归纳算法思想: 设置一个空栈,顺序读取括号。读取左括号时,将括号入栈;读取右括号时,弹出栈顶元素,
c++ 数据结构 入栈 出栈 i++ -
C++ STL stack 括号匹配 源代码
括号匹配 STL stack multimap
STL stack multimap