题目描述:
现在,有一行括号序列,请你检查这行括号是否配对。
输入描述:
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[", “]”, “(”, “)” 四种字符
输出描述:
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入:
3
[(])
(])
([])
样例输出:
No
No
Yes

思路分析:

对于括号匹配问题,这里运用C++的栈操作,比较方便。
定义一个变量y,用来判断是否匹配成功,若成功,y=1,否则,y=0;最后根据y的值来输出最后的结果。
定义一个字符数组s,存储输入的符号

定义一个变量l,为字符数组s的最大长度

定义一个变量n,为需要判断的组数

定义一个字符类型的栈sq,判断是字符数组s里面的元素符号是否是‘(’,‘{’,‘[’,若是左半边符号,则入栈,
如不是,则跟已经入栈的栈顶元素进行匹配,
若匹配失败,y=1,结束本次判断;
若匹配成功,则将该元素符号出栈

最后组数循环完之后,判断栈是否为空,是否全都匹配成功出栈了,若栈不为空,则y=1,匹配失败。然后将栈中其他元素全部出栈。

代码如下:

#include <iostream>
#include<stack>
#include<cstring>
#include<cstdio>
using namespace std;int main()
{int n,i,l,y=0;  //l为字符数组s的大小长度;y=1表示匹配失败,y=0表示匹配成功char s[65536];  //定义一个字符数组用来存待匹配的符号stack<char>sq;  //定义一个char类型的栈scanf("%d",&n); //输入要测试的几组数据while(n--){y=0;        //这里的y用来判断是否为空栈cin>>s;l=strlen(s);for(i=0;i<l;i++){if(s[i]=='('||s[i]=='{'||s[i]=='[') //如果字符数组s里面的字符为左半边符号sq.push(s[i]);                  //该字符数组s里面的符号进栈else{if(sq.empty())                  //如果栈为空{y=1;                        //y=1,直接说明匹配不成功,因为根本没有进左括号break;}}if(s[i]==']')                       //判断字符数组里面的元素是否是 ] ,如果是进入下一个判断{if(sq.top()!='[')               //判断栈顶是否是  [{y=1;                        //若不是  [   y=1,匹配失败break;                      //结束}else sq.pop();                  //若是 [  将栈顶元素出栈}if(s[i]=='}')                       //以次类推{if(sq.top()!='{'){y=1;break;}else sq.pop();}if(s[i]==')'){if(sq.top()!='('){y=1;break;}else sq.pop();}}if(!sq.empty())                         //最后,如果栈不为空,则匹配失败{y=1;}if(y==1) printf("No\n");else printf("Yes\n");while(!sq.empty())                      //如果栈不空,栈顶元素出栈,直到栈为空为止{sq.pop();}
}return 0;}

括号配对问题(C++栈)相关推荐

  1. 括号配对问题_栈stack

    问题 A: 括号配对问题 时间限制: 3 Sec  内存限制: 128 MB 提交: 3  解决: 2 [提交][状态][讨论版] 题目描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第 ...

  2. 括号配对问题 -- ACM解决方法

    括号配对问题 (栈的使用) 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100),表示有N组测试数据.后面的N行输入多组输入数据,每组输入数 ...

  3. 括号配对问题----栈模拟

    括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100), ...

  4. 【ACM】括号配对问题 - 栈

    括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100), ...

  5. NYOJ 括号配对问题

    括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100), ...

  6. NYOJ2—括号配对问题

    括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100), ...

  7. NYOJ 2 括号配对问题

    括号配对问题 时间限制:3000 ms  |           内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N& ...

  8. acm括号配对问题c语言,ACM:UESTC - 649 括号配对问题 - stack

    /*/ 简单的括号配对问题 先把给出的数字串全部变成括号串,在用栈去压入括号,每次保存栈顶括号,如果栈顶括号能和下一个括号配对,就把栈顶弹出,指括号的指针后移. 最后判断栈内是否还有元素,如果有,就说 ...

  9. 括号配对问题http://acm.nyist.net/JudgeOnline/problem.php?pid=2

    括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100), ...

  10. 【ACM】nyoj_2_括号配对问题_201308091548

    括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100), ...

最新文章

  1. Direct2D开发:Direct2D 和 GDI 互操作性概述
  2. hdu4115 2sat 石头剪刀布
  3. 【对象程序设计面向】虚继承
  4. php mysql 字段自增_MySQL自增字段取值的详细介绍(附代码)
  5. qrcode-php生成二维码
  6. 串口发送图片VGA显示
  7. c语言定义int 输出4386,C语言 · 矩阵乘法
  8. 2018怎么打开2019_2019年养老金涨幅5%,这几个方面有调整,你到手的钱增加没
  9. MySQL之用Mysql-Proxy实现读写分离
  10. 清风老师数学建模视频课程第1讲层次分析法
  11. 说说百度iOS人脸识别的痛
  12. 使用 Php Artisan Tinker 来调试你的 Laravel 时间 2016-06-19 22:58:13 Laravel学院 原文 http://laravelacademy.org/
  13. rfm模型python_使用python实现RFM模型
  14. 修复常见ACPI问题(DSDT等)
  15. 用JBE修改Java字节码
  16. 自平衡自行车本质就是一个惯性飞轮,本质就是一样的!!!
  17. Javaweb 实现简单的用户注册登录(含数据库访问功能)
  18. 关于嵌入式软件开发的一些思考
  19. 『解疑』flex布局 flex-wrap:wrap 自动换行属性,导致两行div中间有大空行。
  20. 创新型政府网站群建设

热门文章

  1. Telnet初试(本地测试)
  2. Vue脚手架搭建项目
  3. [CSS] Scale on Hover with Transition
  4. POJ3675 Telescope 圆和多边形的交
  5. SOJ 2800_三角形
  6. class threading.Thread()说明:
  7. 心得 如何优雅地跨线程修改主线程窗口控件
  8. WINFORM應用程式的主進入點和清除資源
  9. 资源不在java项目和构建路径上_编译单元不在Java项目的构建路径上-Maven
  10. 关闭运动轨迹_网球初学者如何正确入门网球运动,有哪些学习细节