首页 > 其他分享 >307 括号匹配的检验

307 括号匹配的检验

时间:2023-12-02 11:15:24浏览次数:24  
标签:匹配 top 307 break 括号 flag else stack

括号匹配的检验

描述:

假设一个表达式或一段程序中含有三种括号:圆括号“(”和“)”、方括号“[”和“]”、花括号“{”和“}”。试写一个程序判别给定的表达式或程序中所含括号是否正确配对出现。

输入说明:

每行为一个含有括号的表达式或一段程序。

输出说明:

输出一个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(右括号多了但栈空)

 

标签:匹配,top,307,break,括号,flag,else,stack
From: https://www.cnblogs.com/xzdmzrc221202/p/17871348.html

相关文章

  • docker-compose version 版本匹配
     version:'3.8'services:rmqnamesrv:image:apache/rocketmq:5.1.0container_name:rmqnamesrvports:-9876:9876restart:alwaysprivileged:truevolumes:-/usr/local/rocketmq/nameserver/logs:/home/rocket......
  • 【LeetCode】22. 括号生成
    题目数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。示例1:输入:n=3输出:["((()))","(()())","(())()","()(())","()()()"]示例2:输入:n=1输出:["()"]提示:1<=n<=8思路:利用深度优先遍历,记录左括号可用个......
  • #Y1010. 平衡括号计数
    平衡字符串的性质将左括号看出1,右括号看成-1(1)最后加起来是0(2)中间一直要是正数所以代码如下usingnamespacestd;intn;intdx[2]={1,-1};intans=0;voiddfs(intcur,intx){ if(x<0)return; if(cur==n){ if(x==0)ans++; return; } for(inti=0;i<2;i++){ dfs......
  • FileNotFoundError: [WinError 2] 系统找不到指定的文件。: '0054243eb93327df4b59023
    importos#指定目录directory='E:\\pythonProject\\a'#获取当前目录下所有图片文件image_files=[fforfinos.listdir(directory)iff.endswith('.jpg')orf.endswith('.png')orf.endswith('.jpeg')]#重命名图片文件fori,fileinenumer......
  • centos 历史命令模糊匹配
    参考文章https://blog.csdn.net/evane1890/article/details/112863698  操作步骤  vi~/.bashrcif[[$-==*i*]]thenbind'"\e[A":history-search-backward'bind'"\e[B":history-search-forward'fi//配置......
  • 30_rust_模式匹配
    模式匹配模式:是rust中的一种特殊语法,用于匹配复杂和简单类型的结构。将模式与匹配表达式和其他结构结合使用,可更好控制程序控制流。模式由以下元素(及组合)组成:字面值解构的数组、enum、struct和tuple变量通配符占位符模式匹配的场景match的Arm(分支)格式:matchVALUE{......
  • URL绕过-后缀路径模式匹配设置错误绕过过滤器
    @ConfigurationpublicclassUrlMatchConfigextendsWebMvcConfigurationSupport{@OverridepublicvoidconfigurePathMatch(PathMatchConfigurerconfigurer){//setUseSuffixPatternMatch后缀模式匹配,如果设置为true,路径后面不管多少个//都能匹配......
  • python正则贪婪匹配
    一、问题:我想对a234ba444bab这个字符串,提取出来234和444两组数据,要怎么匹配 二、回答采用re.findall('a(.+?)b','a234ba444bab')说明:这里.+代表起码匹配一个,如果用.*的话可能匹配出来空即0~n个这里?代表最小匹配即非贪婪匹配,上面的意思是当看到b就结束,不加?则看到b不会立马结......
  • 如何在pandas.series.str.contains中匹配以".xls"开头的行
    是的,.在正则表达式中是一个特殊字符,它匹配除了换行符以外的任何字符。如果你想要匹配一个实际的.字符,你需要在它前面加上一个反斜杠\来进行转义。因此,'\.'在正则表达式中表示一个.字符。例如,如果你想要匹配字符串".xls",你需要使用正则表达式'\.xls'。这个正则表达式匹配以.字符开始......
  • 前端学习笔记202307学习笔记第六十八天-前端面试-flex实现圣杯布局2
       ......