环境: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;
}

运行结果:

栈应用:括号匹配问题相关推荐

  1. 利用顺序栈解决括号匹配问题(c++)-- 数据结构

    利用顺序栈解决括号匹配问题(c++)-- 数据结构 参考文章: (1)利用顺序栈解决括号匹配问题(c++)-- 数据结构 (2)https://www.cnblogs.com/yi2105/p/106 ...

  2. C++ 栈的括号匹配

    总结归纳 算法思想: 设置一个空栈,顺序读取括号.读取左括号时,将括号入栈:读取右括号时,弹出栈顶元素,栈顶即是与之匹配的最近的左括号. 匹配不成功的三种情况:(1)读取右括号时,此时栈空,没有与之匹 ...

  3. python括号匹配o(1)复杂度_Python面试题:使用栈处理括号匹配问题

    括号匹配是栈应用的一个经典问题, 题目 判断一个文本中的括号是否闭合, 如: text = "({[({{abc}})][{1}]})2([]){({[]})}[]", 判断所有括 ...

  4. 六十三、栈在括号匹配和表达式求值中的应用

    @Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. ---- Runsen 算法,一门既不容易入门,也不容易精通的学问. 文章目录 括号匹配 数 ...

  5. 数据结构-栈在括号匹配中的应用

    所谓括号校验匹配其实质是对多种类型括号正确配对的校验(包括:().[].{})即([])或者[()]为正确的表达式,如果出现交叉则匹配失败,如[(])或([())则为不正确格式. 该程序也运用了栈的思 ...

  6. 数据结构链表之栈——解决括号匹配问题和逆波兰表达式求值问题——6

    括号匹配问题和逆波兰表达式求值问题 基于上一节已经使用python代码对栈进行了简单的实现,这一节我们在其基础上解决两个常见的问题 案例 括号匹配问题(点我直接到代码实现) 逆波兰表达式求值问题(点我 ...

  7. python中用函数设计栈的括号匹配问题_数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题...

    算法 数据结构 数据结构和算法(Python版):利用栈(Stack)实现括号的匹配问题 在平时写程序当中,我们会经常遇到程序当中括号的匹配问题,也就是在程序当中左括号的数量和右括号的数量必须相等.如 ...

  8. 栈在括号匹配中的应用

    括号匹配问题 假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序任意即()或[([][])]等均为正确的格式,[(]或([())或(()]均为不正确的格式. void test() {int ...

  9. python用栈实现括号匹配问题

    问题描述: 给定一个字符串文字,里面可能含有"()","[]","{}"三种 括号,判断字符串中的括号是否都成对出现*** 思路分析: 如果 ...

  10. 顺序栈实现括号匹配的检验(C语言实现)【栈】

    原理说明 算法思路 代码演示 原理说明 假设表达式中允许括号嵌套,则检验括号是否匹配的方法可用"期待的急迫程度"这个概念来描述. 我们下面给和例子进行说明: 可能出现的不匹配的情况 ...

最新文章

  1. 三十七、Prim算法--求解最小生成树
  2. Enterprise Vault 系列 [CA和DA]
  3. MultipartResolver实现文件上传功能
  4. android中view刷新界面,Android view invalidate()使用
  5. 机器学习基础:分类vs回归
  6. SAP Spartacus的configModule
  7. Java反射机制在UI自动化测试中的一个应用
  8. Android 如何添加一种锁屏方式
  9. 简评黑客利器——中国菜刀
  10. 支付宝打年兽神器 v1.4.5
  11. Linux命令:find命令
  12. redhat6安装git出现的问题
  13. 也许你并不了解 java.lang.String | JDK 11 源码阅读分析(灌水)与优化实测
  14. java导出功能(多个sheet页数据导出)
  15. ansible(一)自动化运维工具
  16. x265-1.7版本-common/quant.cpp注释
  17. UG NX 12 草图设计
  18. pAdTy_3 构建地理位置和地图的应用程序
  19. Java网络编程socket基础学习
  20. unpacked value/target cannot be used in assignment

热门文章

  1. PyCharm安装第三方库超时的解决办法
  2. python 函数返回值为函数
  3. 谈谈我对服务化的理解
  4. 【转】服务化框架技术选型与京东JSF解密
  5. winform listview 动态编辑_霓虹灯:免费动画文字字体– 36个免费动态图形元素
  6. 3C电商平台为什么做不好图书业务?
  7. 通过for循环实现百钱买百鸡的问题: 公鸡5元每只,母鸡3元每只,小鸡3只1元,100元买一百只鸡多少种办法?
  8. c51单片机矩阵键盘1602计算器_【Proteus】单片机配合矩阵键盘LCD1602制作简易计算器...
  9. linux 上plsql命令_Linux环境Oracle常用命令
  10. php resque gearman,通过Gearman实现MySQL到Redis的数据同步