原文地址:http://www.cppblog.com/GUO/archive/2010/09/12/126483.html

/*
括号匹配问题,比较经典,利用堆栈来实现(摘自internet)1. 括号匹配的四种可能性:①左右括号配对次序不正确
②右括号多于左括号
③左括号多于右括号
④左右括号匹配正确2. 算法思想:顺序扫描算数表达式(表现为一个字符串),当遇到三种类型的左括号时候让该括号进栈;
当扫描到某一种类型的右括号时,比较当前栈顶元素是否与之匹配,若匹配,退栈继续判断;
若当前栈顶元素与当前扫描的括号不匹配,则左右括号配对次序不正确;
若字符串当前为某种类型的右括号而堆栈已经空,则右括号多于左括号;
字符串循环扫描结束时,若堆栈非空(即堆栈尚有某种类型的左括号),则说明左括号多于右括号;
否则,括号配对正确。3. 程序实现:
*/
#include <iostream>
using namespace std;#define maxsize 100struct 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++、堆栈)相关推荐

  1. LeetCode 堆栈队列 —— 括号匹配(20、232、155)

    1. 堆栈(stack) 20,20. Valid Parentheses,括号匹配,堆栈(python 中使用 list 即可实现表示堆栈,list.append:入栈,list.pop():出栈) ...

  2. 【艾米莉娅】matrix:valid parentheses括号匹配代码分享(非堆栈版)

    之前大风dalao使用堆栈实现了括号匹配,但毕竟堆栈是过于超前的内容,很多小伙伴看不懂.因而分享一下自己做的非堆栈型括号匹配代码. Given a string containing just the ...

  3. CCF NOI1113 括号匹配

    问题链接:CCF NOI1113 括号匹配. 时间限制: 1000 ms  空间限制: 262144 KB 题目描述 给定一个只包含左右括号的合法括号序列,按右括号从左到右的顺序输出每一对配对的括号出 ...

  4. Algorithm:C++语言实现之链表相关算法(单链公共结点问题、一般LCA、括号匹配、最长括号匹配、逆波兰表达式Reverse Polish Notation、直方图矩形面积、收集雨水问题)

    Algorithm:C++语言实现之链表相关算法(单链公共结点问题.一般LCA.括号匹配.最长括号匹配.逆波兰表达式Reverse Polish Notation.直方图矩形面积.收集雨水问题) 目录 ...

  5. 括号匹配+Java栈

    括号匹配 import java.util.LinkedList;class MyStack{private int num;private LinkedList<Character>da ...

  6. dp括号匹配 网易面试题_面试题:大括号验证

    dp括号匹配 网易面试题 这是较容易的编码任务之一,但是您仍然可以在一些初步的技术筛选中达到目标. 问题看起来像这样: 给定仅包含字符'(' , ')' , '{' , '}' , '['和']'的字 ...

  7. [栈应用一] 括号匹配问题

    stack<int> S;   定义一个元素类型为int的堆栈S S.push(i);    向堆栈中压入一个数 int x = S.pop();   读取栈顶元素,并赋值x S.pop( ...

  8. Bailian3704 扩号匹配问题【堆栈】

    3704:扩号匹配问题 总时间限制: 1000ms 内存限制: 65536kB 描述 在某个字符串(长度不超过100)中有左括号.右括号和大小写字母:规定(与常见的算数式子一样)任何一个左括号都从内到 ...

  9. 华为编程大赛之括号匹配

    输入一个字符串表达式,判断括号匹配 例如:{}{}{}[][](){[]}  匹配 {[{]}}  不匹配 使用堆栈实现,源码如下: #include <stdio.h> #include ...

最新文章

  1. python 自己写个调试工具
  2. 打靶归来——记参加射击比赛感想
  3. 删除目录下的特定命名的图片,获取特定名称图片的路径
  4. html5 如何局部放大,【HTML5特效】挺简单的HTML5放大效果
  5. HarmonyOS之AI能力·文字图像超分
  6. 音频放大电路_低音升压功率放大器电子电路的完整设计
  7. spring cloud Eureka server 问题 Spring Cloud java.lang.TypeNotPresentException
  8. 表单标签(HTML)
  9. BZOJ4552: [Tjoi2016Heoi2016]排序
  10. 从零基础入门Tensorflow2.0 ----二、4.3 wide deep 模型(多输入)
  11. 目标检测M2Det论文总结
  12. 深度学习常用框架和基础模型
  13. CardView的基本使用
  14. 利用CSS3中的clac()实现按照屏幕分辨率自适应宽度
  15. 【期末复习】网络安全技术(双语)
  16. Bing Maps-----微软
  17. Tensorflow详解 命令行参数flags
  18. linux系统新增2t以上硬盘,在linux下新增一块硬盘的操作。(包含大于2T的硬盘在linux下挂载操作)...
  19. Resource leak解决办法
  20. 王阳明心学主要讲了什么

热门文章

  1. springboot整合mysql5.7_详解SpringBoot整合MyBatis详细教程
  2. sap甲方_带你走进SAP项目实施过程——前言
  3. 自动驾驶与交通效率数学建模_业界大咖:5G智慧交通体系将推动自动驾驶换挡提速 | 推广...
  4. php发送邮件时间间隔,在使用phpmailer群发邮件时如何设置发送的时间间隔?
  5. python安装anaconda ubuntu_Ubuntu 16.4 安装anaconda 详细教程
  6. 安卓学习笔记35:广播接收者
  7. VB案例:多功能文本处理器
  8. PHP开发套件采用wamp时配置PHPStorm
  9. python函数的参数可以接收哪些类型的数据_python强势来袭-0015-函数中的参数-送礼开始...
  10. 2017.7.19 Race 思考记录