<>题目描述

请写一个程序,判断给定表达式中的括号是否匹配,表达式中的合法括号为”(“, “)”, “[", "]“, “{“,
”}”,这三个括号可以按照任意的次序嵌套使用。

<>输入

有多个表达式,输入数据的第一行是表达式的数目,每个表达式占一行。

<>输出

对每个表达式,若其中的括号是匹配的,则输出”yes”,否则输出”no”。

<>样例输入
4 [(d+f)*{}] [(2+3)) ()} [4(6]7)9
<>样例输出
yes no no no
思路:用stack以及map,通过map将”(“, “)”, “[", "]“, “{“,
”}”他们中的任何两个绑在一起。输入一个字符串后,如果字符串的元素是括号,则将其入栈,如果该括号正和栈顶元素是一对,则将栈顶元素出栈。最后,如果栈为空,则表示是合法的,若不为空,则不合法。
#include <iostream> #include <string> #include <stack> #include <cstdio> #
include <map> using namespace std; int main() { int n,i,j; string str; stack<
char> s; map<char,char> mp; //将括号们绑在一起 mp['(']=')'; mp['{']='}'; mp['[']=']'; mp
[')']='('; mp['}']='{'; mp[']']='['; while(scanf("%d\n",&n)!=EOF){ for(i=0;i<n;i
++){ getline(cin,str); for(j=0;j<str.length();j++){ if(!s.empty()&&mp[s.top()]==
str[j]){ //如果栈不为空且该字符为栈顶元素的好朋友 s.pop(); //则将栈顶元素出栈 continue; //且跳过以后的步骤 }
//如果是括号,则入栈 if(str[j]=='('||str[j]=='{'||str[j]=='['||str[j]==')'||str[j]=='}'||
str[j]==']') s.push(str[j]); } if(s.empty()) printf("yes\n"); //栈为空表示合法 else
printf("no\n"); //栈不空表示非法 while(!s.empty()) s.pop(); //此时如果栈不空的话,栈中会有残留,应将栈置空 }
} return 0; }

技术
©2019-2020 Toolsou All rights reserved,
Vue.js入门(五)---在vue中使用echarts词云Pandas统计分析基础_数据处理(DataFrame常用操作)element UI dialog点击dialog区域外会关闭dialog应届毕业生看过来!Java面试经典77问,看完离工作就不远了关于蓝桥杯大赛,你应该了解的那些事!mysql 分区-key分区(五)海康威视-嵌入式软件笔试题PHP Redis 监听过期的 key 事件C语言循环语句笔记详解以及练习-折半查找算法、猜数字游戏JVM概述