括号配对问题(C++栈)
题目描述:
现在,有一行括号序列,请你检查这行括号是否配对。
输入描述:
第一行输入一个数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++栈)相关推荐
- 括号配对问题_栈stack
问题 A: 括号配对问题 时间限制: 3 Sec 内存限制: 128 MB 提交: 3 解决: 2 [提交][状态][讨论版] 题目描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第 ...
- 括号配对问题 -- ACM解决方法
括号配对问题 (栈的使用) 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100),表示有N组测试数据.后面的N行输入多组输入数据,每组输入数 ...
- 括号配对问题----栈模拟
括号配对问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100), ...
- 【ACM】括号配对问题 - 栈
括号配对问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100), ...
- NYOJ 括号配对问题
括号配对问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100), ...
- NYOJ2—括号配对问题
括号配对问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100), ...
- NYOJ 2 括号配对问题
括号配对问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N& ...
- acm括号配对问题c语言,ACM:UESTC - 649 括号配对问题 - stack
/*/ 简单的括号配对问题 先把给出的数字串全部变成括号串,在用栈去压入括号,每次保存栈顶括号,如果栈顶括号能和下一个括号配对,就把栈顶弹出,指括号的指针后移. 最后判断栈内是否还有元素,如果有,就说 ...
- 括号配对问题http://acm.nyist.net/JudgeOnline/problem.php?pid=2
括号配对问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100), ...
- 【ACM】nyoj_2_括号配对问题_201308091548
括号配对问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100), ...
最新文章
- Direct2D开发:Direct2D 和 GDI 互操作性概述
- hdu4115 2sat 石头剪刀布
- 【对象程序设计面向】虚继承
- php mysql 字段自增_MySQL自增字段取值的详细介绍(附代码)
- qrcode-php生成二维码
- 串口发送图片VGA显示
- c语言定义int 输出4386,C语言 · 矩阵乘法
- 2018怎么打开2019_2019年养老金涨幅5%,这几个方面有调整,你到手的钱增加没
- MySQL之用Mysql-Proxy实现读写分离
- 清风老师数学建模视频课程第1讲层次分析法
- 说说百度iOS人脸识别的痛
- 使用 Php Artisan Tinker 来调试你的 Laravel 时间 2016-06-19 22:58:13 Laravel学院 原文 http://laravelacademy.org/
- rfm模型python_使用python实现RFM模型
- 修复常见ACPI问题(DSDT等)
- 用JBE修改Java字节码
- 自平衡自行车本质就是一个惯性飞轮,本质就是一样的!!!
- Javaweb 实现简单的用户注册登录(含数据库访问功能)
- 关于嵌入式软件开发的一些思考
- 『解疑』flex布局 flex-wrap:wrap 自动换行属性,导致两行div中间有大空行。
- 创新型政府网站群建设