括号匹配-栈
【问题描述】
假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,但需要成对出现。即([]( )或[([ ][ ])]等为正确的格式, [(])或([())或(()])均为不正确的格式。 给定一串括号输入(换行作为结束符),检测格式是否正确,若正确输出yes;错误输出no。
【样例输入】
([]( ))
【样例输出】
yes
#include<iostream> #include<cstring> using namespace std; char stack[100], a[100]; int top=0; void push(char x){ if(top<strlen(a)){ // 此处注意:计算的是原数组的长度。 top++; stack[top]=x; cout<<"入栈顺序:"<<stack[top]<<" "<<endl; return; } } void pop(){ if(top>0){ cout<<"出栈顺序:"<<stack[top]<<" "<<endl; top--; return; } } int getTop(){ return top; } int main(){ // 输入括号: cin>>a; for(int i=0; i<strlen(a); i++){ if(a[i]=='('||a[i]=='['){ // 入栈规则:(([()]))、()[()]、[)、(()]) push(a[i]); }else if( (a[i]==')'&&stack[top]=='(') || (a[i]==']'&&stack[top]=='[') ){ // 出栈规则: pop(); }else{ // 输入的括号不满足入栈和出栈规则,不能再继续循环下去了!!! break; } cout<<"栈顶:"<<getTop()<<" "<<endl; } if(getTop()==0){ cout<<"yes"; }else{ cout<<"no"; } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include<iostream> #include<cstring> #include<stack> using namespace std; stack< int >s; int main(){ char a[100]; cin>>a; for ( int i=0; i< strlen (a); i++){ // 入栈: if (a[i]== '(' ||a[i]== '[' ){ s.push(a[i]); } // 出栈:((] else if (s.top()== '(' &&a[i]== ')' ||s.top()== '[' &&a[i]== ']' ){ s.pop(); } else { cout<< "no" ; return 0; } } if (s.empty()){ cout<< "yes" ; } else { cout<< "no" ; } return 0; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理