栈应用:括号匹配问题
来源:互联网 发布:七天网络阅卷查分入口 编辑:程序博客网 时间:2024/05/17 00:51
环境:win10,vs2103
思想:
利用栈的特性:先进后出,而且要取栈里的元素,只能从栈顶得到
逐个访问字符串中的字符,如果是括号就按如下的流程,如果不是括号,那就什么也不做,继续往后访问,直到访问完整个字符串
代码:
#include<iostream>#include<stdlib.h>#include<stdlib.h>#include<stack>using namespace std;bool IsBracket(char c){ if ( '(' == c || ')' == c || '{' == c || '}' == c || '[' == c || ']'== c ) return true; return false;}bool MatchBrackets(const char*str){ size_t len = strlen(str); stack<char> s; for (size_t i = 0; i < len; ++i) { if (!IsBracket(str[i]))//如果不是括号,那就直接结束本次循环 continue; else { //检测当前字符是否为左括号 if ( '(' == str[i] || '[' == str[i] || '{' == str[i] ) s.push(str[i]);//如果为左括号,那就压入栈中 else { //当前字符为右括号 //当前字符是右括号,栈里存放的是左括号,如果此时栈为空的话,所以右括号比左括号多 if (s.empty()) { cout << "右括号比左括号多" << endl; return false; } char c=s.top();//取栈顶元素 //如果栈顶元素与当前元素匹配的话,那就把栈顶元素弹出 if ('(' == c && ')' == str[i] || '{' == c && '}' == str[i] || '[' == c && ']' == str[i]) { s.pop();//将栈顶元素弹出 } //栈顶元素与当前元素不匹配 else { cout << "左右括号次序匹配出错" << endl; return false; } } } } //把已知字符串已经遍历完,栈中存放的是左括号,栈还没有空的话,那就是左括号比右括号多 if (!s.empty()) { cout << "左括号比右括号多" << endl; return false; } //把已知字符串已经遍历完,栈中也是空的,那就是刚好匹配的情况 cout << "左右匹配正确" << endl; return true;}int main(){ char a[] = "(())abc{[(])}"; // 左右括号次序匹配不正确 char b[] = "(()))abc{[]}"; // 右括号多于左括号 char c[] = "(()()abc{[]}"; // 左括号多于右括号 char d[] = "(())abc{[]()}"; // 左右括号匹配正确 MatchBrackets(a); MatchBrackets(b); MatchBrackets(c); MatchBrackets(d); system("pause"); return 0;}
运行结果:
阅读全文
0 0
- 栈应用:括号匹配问题
- 栈的应用2--括号匹配问题
- 栈的应用----括号匹配问题
- 栈的应用---括号匹配问题
- 括号匹配问题----栈的应用
- [栈的应用]括号匹配问题
- [栈] 括号匹配问题
- 栈(括号匹配问题)
- 括号匹配问题(栈)
- 括号匹配问题 栈的应用 C语言实现
- 数据结构之栈的应用:括号匹配问题
- nyoj 括号匹配问题(栈的应用)
- c语言栈的应用之括号匹配问题
- 题目1153:括号匹配问题(栈的应用)
- 栈的应用--九度1153.括号匹配问题
- 数据结构栈应用括号匹配
- 栈的应用:括号匹配
- 括号匹配---栈的应用
- C++中的强制类型转换
- maven 配置文件setting.xml说明
- Java Lambda表达式入门
- [虚树+树形DP]BZOJ 2286—— [Sdoi2011]消耗战
- mybatis 批量insert 插入
- 栈应用:括号匹配问题
- centos6.5下安装oracle11g数据库步骤
- OpenGL编译着色器程序
- 安卓技术文章集合—184篇文章分类汇总
- Linux system NFS、iSCSI
- web表单
- C#笔记(17)程序只运行一个实例
- ASP.NET Web Form(八)
- centos7安装maven