文章

67

粉丝

207

获赞

29

访问

36.5k

头像
括号的匹配 题解:新手方法简单易懂
P1067 中山大学2019年机试题
发布于2024年2月18日 20:21
阅读数 942

#include <iostream>
#include <string.h>
using namespace std;
int main(){
	int n,cc=0,num=0,top=-1,flag=0;
	char now;
	cin >>n;
	char stack[300];char b[105][300];char c[105][10];
	for(int i=0;i<105;i++)for(int j=0;j<300;j++)	b[i][j]=0;
	for(int i=0;i<105;i++)for(int j=0;j<10;j++)	c[i][j]=0;
	for(int i=0;i<300;i++)	stack[i]=0;
	for(int i=0;i<n;i++){
		top=-1;	num=0;	now=0;
     cin >> b[i];
	 for(int j=0;j<strlen(b[i]);j++){
		 flag=0;
	 if(num>0){
		 now=stack[top];
		 //能匹配上=====================
		 if((now=='<'&&b[i][j]=='>')||(now=='('&&b[i][j]==')')||(now=='['&&b[i][j]==']')||(now=='{'&&b[i][j]=='}'))
		 {
			 num--;//栈中元素减少
			 top--;
		 }
		 else //不能匹配上==================
		 {    //if条件就是不符合优先级,直接跳出循环
			 if((now=='<'&&(b[i][j]=='('||b[i][j]=='['||b[i][j]=='{'))||(now=='('&&(b[i][j]=='['||b[i][j]=='{'))||(now=='['&&b[i][j]=='{')){
			 flag...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发