括号配对问题

1. 括号匹配的四种可能性:
①左右括号配对次序不正确
②右括号多于左括号
③左括号多于右括号
④左右括号匹配正确

2. 算法思想:
1.顺序扫描算数表达式(表现为一个字符串),当遇到三种类型的左括号时候让该括号进栈;
2.当扫描到某一种类型的右括号时,比较当前栈顶元素是否与之匹配,若匹配,退栈继续判断;
3.若当前栈顶元素与当前扫描的括号不匹配,则左右括号配对次序不正确,匹配失败,直接退出;
4.若字符串当前为某种类型的右括号而堆栈已经空,则右括号多于左括号,匹配失败,直接退出;
5.字符串循环扫描结束时,若堆栈非空(即堆栈尚有某种类型的左括号),则说明左括号多于右括号,匹配失败;

6.正常结束则括号匹配正确。


代码如下:

#include<iostream> #include<string> #include<string.h> #include<algorithm> #include<cstdio> using namespace std; struct sStack { char sign[10010]; int top; }; void initstack(sStack &s) { s.top = -1; } bool isemptystack(sStack &s) { return s.top == -1 ? 1 : 0; } int pushstack(sStack &s, char c) { s.sign[++s.top] = c; return 1; } int popstack(sStack &s) { if(isemptystack(s)) return 0; s.top--; return 1; } char topstack(sStack &s) { if(isemptystack(s)) return 0; return s.sign[s.top]; } int main() { int N, len, i; bool flag; char str[10010]; sStack s; scanf("%d", &N); while(N--) { flag = 1; scanf("%s", str); len = strlen(str); initstack(s); for(i = 0; i < len; ++i) { if(str[i] == '(' || str[i] == '[' || str[i] == '{') pushstack(s, str[i]); else if(str[i] == ')') { if(isemptystack(s) || topstack(s) != '(') flag = 0; else popstack(s); } else if(str[i] == ']') { if(isemptystack(s) || topstack(s) != '[') flag = 0; else popstack(s); } else if(str[i] == '}') { if(isemptystack(s) || topstack(s) != '{') flag = 0; else popstack(s); } } if(!isemptystack) {flag = 0;} if(flag) printf("Yes\n"); else printf("No\n"); } return 0; }

C语言详解括号匹配问题(栈的应用 ) 详细解释括号匹配算法,并用C语言实现 阅读详情

相关推荐

C语言经典算法之括号匹配算法

括号匹配算法通常用于检查一个字符串中的括号是否正确匹配和嵌套。括号匹配算法在现实中有许多实际应用,尤其是在处理文本、编程语言、数据格式等方面。

weixin_56154577的博客 6592

【经典问题】括号匹配问题

文章目录前言例题算法思想算法举例代码栈类括号匹配核心算法完整代码运行结果 前言 括号匹配问题算是栈应用中比较经典的问题了,在数据结构的书中还有各种考试中会出现。最近刷题的时候也遇到了,就想写一篇文章整理一下。 例题 题目来自Leetcode中国 给定一个只包括 (,),{,},[,] 的字符串,判断字符串是否有效。 有效字符串需满足: 1、左括号必须用相同类型的右括号闭合。 2、左括号必须以正确的...

mgsky1的博客 4万+

同济大学824复试全攻略:从笔试到面试的实战解析

本文详细解析同济大学824复试全流程,包括专业课笔试、外语听力与口语、专业外语笔试和专业综合面试的备考策略。重点分享数字信号处理、计算机网络等专业课的高效学习方法,以及专业外语速成和口语面试技巧,助力考生全面提升复试表现。

qq_27496129的博客 1030

判断括号是否匹配

判断括号是否匹配:给定 n 组数,每组为一个字符串,测试 3 种括号:{}、[]、(),且顺序只能是前左括号,后右括号,括号间可以嵌套。若匹配则输出 yes,否则输出 no; 如:{@}[a](4)、{[()]} 都是匹配的; {[[]}、{}{ 都是不匹配的。 #include &lt;stdio.h&gt; #include &lt;stack&gt; #include &lt;strin...

子生的博客 2199

括号配对问题 2】

括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述现在,有一行括号序列,请你检查这行括号是否配对。 输入第一行输入一个数N(0 输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No 样例输入 3 [(]) (]) ([[]()]) 样例输出 No No Yes

lavendermaple的专栏 612

stl-stack+括号配对问题

栈:stl的一种容器,遵循先进后出原则,,只能在栈的顶部操作,就像放盘子一样,洗好的盘子叠在上面,需要用时也是先从顶部拿。不允许被遍历,没有迭代器 基本操作: 1.头文件#include<stack> 2.top() 返回栈顶元素 3.pop() 弹出栈顶元素 4.empty()若栈空返回true,非空返回false 5.size() 返回栈的元素个数,在c+...

dengpan1889的博客 156

nyoj 括号配对问题

括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述现在,有一行括号序列,请你检查这行括号是否配对。 输入第一行输入一个数N(0 输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No 样例输入 3 [(]) (]) ([[]()]) 样例输出 No No Yes

走一步再走一步 822

1029 -- 括号配对问题

1029 -- 括号配对问题

jtahstu_akoj的博客 3128

nyoj括号配对问题

括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对。 输入第一行输入一个数N(0输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No样例输入 3 [(]) (]) ([[]()]) 样例输出 No No Yes #inc

坚持 1295

NYOJ2 括号配对问题

括号配对问题 时间限制:3000ms | 内存限制:65535KB 难度:3 描述现在,有一行括号序列,请你检查这行括号是否配对。 输入第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[",...

Liusuzhi19610221的博客 139

ACM 括号配对问题

括号配对问题 描述现在,有一行括号序列,请你检查这行括号是否配对。 输入第一行输入一个数N(0 输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No 样例输入 3 [(]) (]) ([[]()]) 样例输出 No No Yes jie

ucnioa的专栏 1133

NYOJ2—括号配对问题

括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述现在,有一行括号序列,请你检查这行括号是否配对。   输入第一行输入一个数N(0&lt;N&lt;=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[", "]", "("...

Y先森0.0 161

Power EM与Signal EM解决办法与原理分析

1.面对power EM,首先检查missing via,补全via,还可以加宽,加密局部power mesh,一些power IO出pin有power EM问题,可以叠加多层线和垂直方向补power形成网络降低并联电阻和提供更多电流通路解决,这种方法还可以降低ir drop。3.先进工艺有一个via ladder的方法可以解决power/signal em问题,clock cell出pin绕线或者power rail连接power stripe通过搭梯子的方式连接,原理还是分流。

m0_61544122的博客 4609

语音分离基于matlab FastICA语音信号采集+混合+分离【含Matlab源码 008期】.zip

CSDN海神之光上传的全部代码均可运行,亲测可用,尽我所能,为你服务;1、代码压缩包内容主函数:ICADemo.m;调用函数:其他m文件; 语音信号,其格式为MP4;运行结果效果图;2、代码运行版本Matlab 2019b;若运行有误,根据提示修改;若不会,可私信博主;3、运行操作步骤步骤一:将所有文件放到 Matlab的当前文件夹中; 步骤二:双击打开ICADemo.m文件;(若有其他m文件,无需运行)步骤三:点击运行,等程序运行完得到结果;4、语音处理系列仿真咨询如需其他服务,可私信博主或扫描博主博客文章底部QQ名片;4.1 CSDN博客或资源的完整代码提供4.2 期刊或参考文献复现4.3 Matlab程序定制4.4 科研合作语音处理系列程序定制或科研合作方向:语音隐藏、语音压缩、语音识别、语音去噪、语音评价、语音加密、语音合成、语音分析、语音分离、语音处理、语音编码、音乐检索、特征提取、声源定位、情感识别、语音采集播放变速等;

上一篇: 多元集合multiset用法
下一篇: 整数进位
iteye_10189
博客等级 码龄8年 25粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值