数据结构-Stack-表达式符号是否对称

#include<iostream>
#include<stack>
#include<string>

using namespace std;
# 判断符号是否为一对
bool ArePair(char opening, char closing)
{
	if (opening == '(' && closing == ')') return true;
	else if (opening == '{' && closing == '}') return true;
	else if (opening == '[' && closing == ']') return true;
	return false;
}

bool AreParenthesesBalanced(string exp)
{
	stack<char> S;
	for (int i = 0; i < exp.length(); i++)
	{
	        #如果是‘(’ '{' '['则压入栈中
		if (exp[i] == '(' || exp[i] == '{' || exp[i] == '[')
			S.push(exp[i]);
			#如果是')' ']''}'则判断栈中是否为空 与斩的顶端是否配对 是的话则将栈顶出栈
		else if (exp[i] == ')' || exp[i] == '}' || exp[i] == ']')
		{
			if (S.empty() || !ArePair(S.top(), exp[i]))
				return false;
			else
				S.pop();
		}
	}
	#如果栈为空 则表达式符号对称
	return S.empty() ? true : false;
}

int main()
{
	string expression;
	cout << "Please enter the expression: ";
	cin >> expression;
	if (AreParenthesesBalanced(expression))
		cout << "Balanced \n";
	else
		cout << "Not Balanced\n";
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值