jzxx1542 括弧匹配检验

jzxx1542  括弧匹配检验

时空限制    1000ms/64MB

题目描述

假设表达式中允许包含三种括号:圆括号,方括号和花括号,其嵌套的顺序随意,如{[ ]()}或[([ ][ ])]等为正确的匹配,[(])或([ ]( )或 (()))均为错误的匹配。现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配?输入一个包含圆括号,方括号,花括号和其它字符的字符串,判断字符串中的括号是否匹配,匹配就输出 “T” ,不匹配就输出“F”。

输入

输入仅一行字符(字符个数小于255)

输出

匹配就输出 “T” ,不匹配就输出“F”。

样例输入 

示例1:38+38+[8+(5-2])
示例2:19-[8/(3+[5-2]*[7-5])]

样例输出 

示例1:F      示例2:T


代码

法一:STL栈版本

#include<iostream>
#include<string>
#include<stack>
using namespace std;
string s;
stack<char> sk;

int main(){
    getline(cin,s);
    int len=s.size();
    for (int i=0; i<len; i++)
        if (s[i]=='(' || s[i]=='[' || s[i]=='{') sk.push(s[i]);
        else if (s[i]==')'){
            if (sk.empty()) { cout<<"F\n"; return 0; }
            else if (sk.top()=='(') sk.pop();
            else sk.push(s[i]);
        }
        else if (s[i]==']'){
            if (sk.empty()) { cout<<"F\n"; return 0; }
            else if (sk.top()=='[') sk.pop();
            else sk.push(s[i]);
        }
        else if (s[i]=='}'){
            if (sk.empty()) { cout<<"F\n"; return 0; }
            else if (sk.top()=='{') sk.pop();
            else sk.push(s[i]);
        }
    if (sk.empty()) cout <<"T\n";
    else cout<<"F\n";
    return 0;
}

法二:手动栈版本

#include<iostream>
#include<string>
using namespace std;
char a[300];
int k=0;

void push(char ch){
	a[k++]=ch;
}

bool empty(){
	return k==0;
}

char top(){
	return a[k-1];
}

void pop(){
	if (!empty()) k--;
}

int main(){
	string s;
	cin>>s;
	for (int i=0,len=s.size(); i<len; i++)
		if (s[i]=='(' || s[i]=='[' || s[i]=='{') push(s[i]);
		else if (s[i]==')'){
			if (empty()) { cout<<"F\n"; return 0; }
			else if (top()=='(') pop();
			else push(s[i]);
		}
		else if (s[i]==']'){
			if (empty()) { cout<<"F\n"; return 0; }
			else if (top()=='[') pop();
			else push(s[i]);
		}
		else if (s[i]=='}'){
			if (empty()) { cout<<"F\n"; return 0; }
			else if (top()=='{') pop();
			else push(s[i]);
		}
	if (empty()) cout<<"T\n";
	else cout<<"F\n";
	return 0;
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载,不得用于商业用途。 https://blog.csdn.net/WDAJSNHC/article/details/79945660
个人分类:
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭