括号匹配问题

/*
判断if语句中的括号描述:编程的时候,if条件里面的"("、")"括号经常出现不匹配的情况导致编译不过,
请编写程序检查输入一行if语句中的圆括号是否匹配正确,同时输出语句中出现的左括号数量和右括号数量。
如if((a==1) && (b==1))是正确的,而if((a==1))&&(b==1))是错误的。
备注:只检查圆括号合法性,不检查其他括号和语句本身语法合法性。
另外,if语句最外层至少有一对括号,如if (a==b) && (c!=d) 也是不正确的。
运行时间限制:无限制内存限制:无限制输入:一行if语句字符串输出:
判断括号语法是否正确,正确输出RIGHT,错误输出WRONG,
同时输出左括号数量和右括号数量,以空格隔开。如:RIGHT 2 3,WRONG 1 1。
样例输入:if((a==1) && (b==1))样例输出:RIGHT 3 3答案提示:对括号的处理可以使用堆栈的原理,先进后出。注意if语句至少有一对括号。 

*/

#include<iostream>
using namespace std;

bool flag;
void judge( char * inputstr , int & left_num , int & right_num ) {
	char *q;
	q = inputstr;
	int a[ 100 ];
	int l, r;
	int length = 0;
	while( *q != '\0' ) {
		if( *q == '(' ) {
			a[ length ++ ] = -1;
		}
		if( *q == ')' ){
			a[ length ++ ] = 1;
		}
		q ++;
	}
	int i;
	int sum = 0;
	flag = true;
	for( i = 0 ; i < length ; i ++ ) {
		sum += a[ i ];
		if( ( ( sum == 0 ) && ( i < length - 1 ) )  || ( sum > 0 ) ) {
			flag = false;
		}
	}
	if( flag ) {
		if( sum == 0 ) {
			flag = true;
		}
		else {
			flag = false;
		}
	}
	l = 0;
	r = 0;
	for( i = 0 ; i < length ; i ++ ) {
		if( a[ i ] == -1 ) {
			l ++;
		}
		else {
			r ++;
		}
	}
	left_num = l;
	right_num = r;
	if( l == 0 && r == 0 ) {
		flag = false;
	}
}


int main() {
	char inputstr[ 100 ];
	int left_num = 0;
	int right_num = 0;
	gets( inputstr );
	judge( inputstr , left_num , right_num );
	if( flag ) {
		cout << "RIGHT" << " " << left_num << " " << right_num << endl;
	}
	else {
		cout << "WRONG" << " " << left_num << " " << right_num << endl;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值