Java教程

307 括号匹配的检验

本文主要是介绍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 括号匹配的检验的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!