XDOJ c语言 括号匹配问题(不用栈)

标题    
括号匹配

类别    
字符串处理

时间限制    
2S
内存限制    
1000Kb

问题描述    
表达式中的合法括号为“(”、“)”、“[”、“]”、“{”、“}”,这三种括号可以按照任意的次序嵌套使用。
请写一个程序,判断给定表达式中的括号是否匹配,既左右括号顺序和数量都匹配。

输入说明    
输入为一个表达式字符串,长度不超过50。

输出说明    
对输入的表达式,若其中的括号是匹配的,则输出“yes”,否则输出“no”。

输入样例    
样例1输入
[(d+f)*{}2]
样例2输入
[(2+3))

输出样例    
样例1输出
yes
样例2输出
no

#include<stdio.h>
#include<string.h>
int main()
{
	char a[50],b[50]={0};
	int i,j=0,z=0,x=0,c=0;
	gets(a);
	for(i=0;a[i]!=0;i++)
	{
		if(a[i]==40||a[i]==41||a[i]==123||a[i]==125||a[i]==91||a[i]==93)
		{
			b[j]=a[i];
			j++;
		}
		else {
			continue;
		}
	}int t[50];j=-1;
    for(i=0;i<strlen(b);i++)
    {
    if(b[i]==40) {j++;z++;t[j]=41; /*将每一次左括号的出现做一个标注,并且把顺序记录*/ 
	}
    if(b[i]==41)                     /*在右括号出现时,检验其是否与之前的左括号顺序匹配,若是则删去标注*/ 
	{
    	if(t[j]!=41)break;
    	else{
    		z--;j--;
		}
    	
	}
    if(b[i]==123) {j++;x++;t[j]=125;
	}
    if(b[i]==125) { if(t[j]!=125) break;
    else{
    	x--;j--;
	}
	}
    if(b[i]==91) {j++;c++;t[j]=93;
	}
	if(b[i]==93) {
		if(t[j]!=93) break;
		else {
			c--;j--;
		}
	}		
	}
	if(z==x&&x==c&&c==0) /*标注都为零表示左右括号都匹配*/ 
	printf("yes");
	else printf("no");

		return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值