括号匹配 冷不防 2022-02-27 15:54 340阅读 0赞 ## PTA 02:括号匹配 ## #### 一、题目 #### 给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,\[ \],\{ \}是否匹配。 输入格式: 输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。 输出格式: 如果括号配对,输出yes,否则输出no。 输入样例1: sin(10+20) 输出样例1: yes 输入样例2: \{\[\}\] 输出样例2: no -------------------- #### 二、代码 #### #include<iostream> #include<stdio.h> #include<string.h> using namespace std; typedef struct Node{ char data; // 数据域 struct Node*next; // 指针域 }StackNode,*LinkStack; //初始化:构造一个空栈 void InitStack(LinkStack &S) { S=NULL; } //获取数据 char GetTop(LinkStack &S){ if(S!=NULL) return S->data; } // 入栈 void Push(LinkStack &S,char ch) { LinkStack p; p=new StackNode; // 生成新结点 p->data=ch; // 将新结点数据域置为e p->next=S; // 将新结点插入栈顶 S=p; // 修改栈顶指针为p } // 出栈 void Pop(LinkStack &S,char ch) { LinkStack p; ch=S->data; p=S; S=S->next; delete p; } bool StackEmpty(LinkStack S){ if(S == NULL) { return 1;} else{ return 0; } } int main() { LinkStack p; LinkStack S; InitStack(S); int flag=1; // 这里的flag的使用是为了解决反复进行判断、退出的麻烦 char ch[100]; cin.getline(ch,100); // 用普通cin 会将空格看作停止输入的符号,但是题目中输入的字符串中是可以有空格的,所以选用getline获取一行中的字符串 for(int i=0;i<strlen(ch);i++) { switch(ch[i]) { case '(': case '[': case '{': Push(S,ch[i]); // 每遇到符合要求的“左括号”将其压入栈 break; case ')': if(!StackEmpty(S) && GetTop(S)=='(') Pop(S,ch[i]); // 当前面有左括号与之匹配,将其压出栈 else flag=0; break; case ']': if(!StackEmpty(S) && GetTop(S)=='[') Pop(S,ch[i]); else flag=0; break; case '}': if(!StackEmpty(S) && GetTop(S)=='{') Pop(S,ch[i]); else flag=0; break; } } if(StackEmpty(S) && flag) cout<<"yes"; else cout<<"no"; return 0; } -------------------- #### 三、经验总结 #### 这道题的思路是出现一次( 、\[ 、 \{ 将其压入栈,如果栈非空且出现与之对应的右括号就将其出栈,这个功能可以由函数match实现 现在比较明确需要push pop match init这些函数了,我们只需把他们写好,重点就是match函数。 但是还有一些细节问题需要注意。 1、为什么用getline不用cin? 如果你试试cin就会发现程序对是对的,但是在PTA上就说你超时,后来改进一下,不用一个一个的输,直接一行一行的看,这里就用到getline函数,但是注意包含头文件\#include<string.h>喔! 2、flag是干啥的 港真~我开始是没想到用flag的,但是后来发现按照我的思路写,隔三差五就会进行判断,不合条件的就退出,结果程序显得很冗长。这时就引入了flag,每次要退出,我只需把flag改为0,到后来“算总账”,flag为0的统统退出。
相关 【Java】括号匹配 \{\} 括号匹配模式 解题思路 栈 import java.util.Scanner; import java.util.Stack; 心已赠人/ 2022年12月09日 04:53/ 0 赞/ 212 阅读
相关 表达式括号匹配 题目描述 假设一个表达式有英文字母(小写)、运算符`(+,—,,/)`和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配, 忘是亡心i/ 2022年12月01日 01:24/ 0 赞/ 199 阅读
相关 括号匹配 <table style="width:1615px; margin-bottom:20px; background-color:transparent"> <tbody> 秒速五厘米/ 2022年06月02日 08:53/ 0 赞/ 253 阅读
相关 括号匹配 [题目 括号匹配][Link 1] 一般的括号匹配问题是这样的: 给出一个字符串,判断这个括号匹配是不是合法的括号匹配。如”((” 和 “())”都不是合法的括号匹配 我会带着你远行/ 2022年05月18日 00:55/ 0 赞/ 207 阅读
相关 括号匹配 栈的应用,括号匹配。 经典做法是,遇左括号压入,遇右括号判断,和栈顶配对就继续,不配对或者栈空就错了。最后判断是否为空。 代码有些麻烦。 我是遇左括号压对应的右括号,最后 你的名字/ 2022年05月06日 06:28/ 0 赞/ 256 阅读
相关 括号匹配 题目描述 假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“\[”和“\]”和花括号“\{”和“\}”,且这三种括号可按任意的次序嵌套使用(如:…\ ╰半橙微兮°/ 2022年03月30日 02:28/ 0 赞/ 288 阅读
相关 括号匹配 PTA 02:括号匹配 一、题目 给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,\[ \],\{ \} 冷不防/ 2022年02月27日 15:54/ 0 赞/ 341 阅读
相关 括号匹配 <table> <tbody> <tr> <td colspan="3"> <h2>括号匹配</h2> </td> </tr> <tr> 约定不等于承诺〃/ 2022年01月07日 04:37/ 0 赞/ 327 阅读
相关 括号匹配 include<stdio.h> include<stack> using namespace std; stack <int> s;//定义一 叁歲伎倆/ 2021年12月01日 17:44/ 0 赞/ 324 阅读
相关 括号匹配 括号配对问题 时间限制: 3000 ms | 内存限制: 65535 KB 难度: 3 描述 现在,有一行括号序列,请你检查这行括号是否配对。 输入 第一行 怼烎@/ 2021年09月22日 07:20/ 0 赞/ 411 阅读
还没有评论,来说两句吧...