热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:实现1353表达式中的括号匹配(栈的应用)

本文由编程笔记#小编为大家整理,主要介绍了1353表达式括号匹配(stack)相关的知识,希望对你有一定的参考价值。 【题目描述】假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆
本文由编程笔记#小编为大家整理,主要介绍了1353表达式括号匹配(stack)相关的知识,希望对你有一定的参考价值。


【题目描述】

假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于255,左圆括号少于20个。

【输入】

一行数据,即表达式。

【输出】

一行,即“YES” 或“NO”。

【输入样例】

2*(x+y)/(1-x)@
【输出样例】

YES
【提示】

【样例输入2】

(25+x)*(a*(a+b+b)@

【样例输出2】

NO
【我的思路】

这道题,一本通上的所有数据都没有出现括号顺序错误。所以,只需要左括号和右括号数量相等就可以了。

【方法一】直接循环【代码如下】


1 #include
2 using namespace std;
3 char a[260];
4 int main()
5 {
6 int i=0,k=0,len;
7 gets(a);
8 len=strlen(a)-1;
9 for(i=0;i<=len;i++)
10 {
11 if(a[i]==()
12 k++;
13 if(a[i]==))
14 k--;
15 }
16 if(k==0)
17 cout<<"YES";
18 else
19 cout<<"NO";
20 return 0;
21 }

【方法二】用模拟栈来解决【代码如下】


1 #include<iostream>
2 #include
3 #include<string>
4 #include
5 using namespace std;
6 char a[10010];
7 int i=0,top=0;
8 int main()
9 {
10 gets(a);
11 int len=strlen(a);
12 for (i=0; i){
13 if(a[i]==(){
14 top++;
15 }
16 if(a[i]==)){
17 if(top>0)top--;
18 else return 0;
19 }
20 i++;
21 }
22 if(top!=0)cout<<"NO";
23 else cout<<"YES";
24 return 0;
25 }

 





推荐阅读
author-avatar
K_M_睡到自然醒cES_881
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有