栈应用——平衡符号

平衡符号用于编译器检查程序的语法错误,每一个右括号( }、]、))必然对应其相应的左括号(eg: [()] 合法;[(])不合法)


算法描述:

·做一个空栈,读入字符直到文件尾;

·如果字符是一个左括号则将其压入栈,

 如果字符是一个右括号:如此时栈空,报错;否则,弹出栈顶元素,若与相应的左括号不匹配,报错;

·到文件尾,栈非空则报错;


算法分析:

时间复杂度为O(N),且对于输入进行一趟检验,是联机的;


代码实现 (只满足 {} 、[] 、())


void balanceMark(string s)
{
	stack
    
    
     
      mark;
	for (size_t i = 0; i < s.length(); ++i) {
		switch (s[i]) {
		case '{':
			mark.push('{');
			break;
		case '[':
			mark.push('[');
			break;
		case '(':
			mark.push('(');
			break;
		case ')':
			if (mark.size() == 0 || mark.top() != '(') {
				cout<<"error with ()";
				return ;
			}
			mark.pop();
			break;
		case ']':
			if (mark.size() == 0 || mark.top() != '[') {
				cout << "error with []";
				return;
			}
			mark.pop();
			break;
		case '}':
			if (mark.size() == 0 || mark.top() != '{') {
				cout << "error with {}";
				return;
			}
			mark.pop();
			break;
		default:
			break;
		}
	}
	if (mark.size() != 0) {
		cout << "error with: ";
		while (!mark.empty()) {
			cout << mark.top();
			mark.pop();
		}
		return;
	}
	cout << "get a balance mark";
}

    
    

加上main函数可以加以实验:
int main()
{
	string s;
	char c;
	while (cin >> c) s.push_back(c);
	balanceMark(s);
	system("pause");
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值