307 括号匹配的检验
2023/12/2 14:32:56
本文主要是介绍307 括号匹配的检验,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
括号匹配的检验
描述:
假设一个表达式或一段程序中含有三种括号:圆括号“(”和“)”、方括号“[”和“]”、花括号“{”和“}”。试写一个程序判别给定的表达式或程序中所含括号是否正确配对出现。
输入说明:
每行为一个含有括号的表达式或一段程序。
输出说明:
输出一个right或wrong,表明正确匹配与否。
输入样例:
while (m<(a[8]+t) {m=m+1; t=t-1;}
输出样例:
wrong
提示
用栈来实现
小粥做只做了十五分钟,但交了......又一个十五分钟!!!!!!因为没有正确理解flag==1&&top==-1这两个为什么需要同时满足才能输出right
思路:很简单,利用栈FILO的性质做就行,很典型的栈的例子,暑假学的留下的一米米印象里面,这个尤其深刻
代码:
1 #include<stdio.h> 2 int main() 3 { 4 char c; 5 char stack[100]; 6 int top=-1; 7 int flag=1; 8 while(1) 9 { 10 scanf("%c",&c); 11 if(c=='{'||c=='['||c=='(') stack[++top]=c; 12 13 else if(c=='}'||c==']'||c==')') 14 { 15 if(c=='}') 16 { 17 if(stack[top]=='{') stack[top--]=NULL; 18 else { flag=0; break; 19 } 20 } 21 else if(c==']') 22 { 23 if(stack[top]=='[') stack[top--]=NULL; 24 else { flag=0; break; 25 } 26 } 27 else if(c==')') 28 { 29 if(stack[top]=='(') stack[top--]=NULL; 30 else {flag=0; break; 31 } 32 } 33 } 34 if(c=='\n') break; 35 } 36 37 if(top==-1&&flag==1) printf("right\n"); 38 else printf("wrong\n"); 39 return 0; 40 }
Attention:
关于37行的红字
1.top==-1,表示栈已空;flag==1,表示匹配成功;
2.小粥犯的错:
第一次只写了flag ==1,那么 {【()】 这种情况也会输出yes(匹配成功但还有剩下的左括号)
第二次只写了top==-1(苯苯的,固执地觉得不用两个条件都满足),那么{【()】}】 这种情况也输出yes(右括号多了但栈空)
这篇关于307 括号匹配的检验的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-01为什么公共事业机构会偏爱 TiDB :TiDB 数据库在某省妇幼健康管理系统的应用
- 2024-04-26敏捷开发:想要快速交付就必须舍弃产品质量?
- 2024-04-26静态代码分析的这些好处,我竟然都不知道?
- 2024-04-26你在测试金字塔的哪一层?(下)
- 2024-04-26快刀斩乱麻,DevOps让代码评审也自动起来
- 2024-04-262024年最好用的10款ER图神器!
- 2024-04-2203-为啥大模型LLM还没能完全替代你?
- 2024-04-2101-大语言模型发展
- 2024-04-17基于SpringWeb MultipartFile文件上传、下载功能
- 2024-04-14个人开发者,Spring Boot 项目如何部署