jzxx1542 括弧匹配检验

23人阅读 评论(0) 收藏 举报
分类:

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;
}
查看评论

括号匹配检验 c++

#include #include using namespace std; void main(){ int i,invalid = 0; char a[50]; char *s=a;...
  • lixiang212121
  • lixiang212121
  • 2015-04-13 13:01:15
  • 2270

顺序栈使用——括号匹配的检验

顺序栈使用——括号匹配的检验 码文不易,如果帮助到您,希望您可以帮我刷一下点击量,与您无害,与我有益谢谢 支持原创 。   欢迎大家阅读我的博客,如果有错误请指正,有问题请提问,我会尽...
  • qq923132714
  • qq923132714
  • 2017-11-30 16:12:17
  • 77

括弧匹配检验(栈)

Description   假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为...
  • chrisblogtk
  • chrisblogtk
  • 2016-04-08 21:42:30
  • 441

栈的应用--括号匹配的检验(C++)

严蔚敏数据结构49页题目。括号匹配的检验。题目的意思是假定只有两种括号[]()要求我们检测一组由'('')'']''['组成的数据是否满足括号匹配  ---()()[][]  YES  ([])([]...
  • u013077144
  • u013077144
  • 2016-04-21 18:54:45
  • 750

笔试题检验括弧的匹配是否正确 (){}【】《》

import java.util.Stack; public class A { public boolean isMatch(String s) { Stack sc = new Stack...
  • u011575885
  • u011575885
  • 2015-09-19 16:49:10
  • 364

SSL1659 栈练习括弧匹配检验

栈练习括弧匹配检验 Description   假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ...
  • zhanghaoxian1
  • zhanghaoxian1
  • 2017-04-07 20:07:12
  • 162

括弧匹配检验

#include #includestring> #include using namespace std; string s; stackint>str; int main() ...
  • qq_33764390
  • qq_33764390
  • 2017-04-21 19:01:31
  • 153

ytuoj 2238: 括号匹配(栈和队列)

问题: Description 假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“ ”,且这三种括号可按任意的次序嵌套使用(如:…[...
  • cxy201658503125
  • cxy201658503125
  • 2018-02-05 21:10:36
  • 29

栈的应用实践——括号匹配的检验

目的:检验一个字符串中的大括号,中括号,小括号是否匹配。 方法:数据结构c语言版提出的期待的急迫程度描述这个问题,具体的思路为: 处于栈顶的括号总是最急迫的期待着和下一个读入的括号进行匹配 ...
  • lan_777
  • lan_777
  • 2016-04-24 10:51:57
  • 897

栈的应用之括号匹配检验

栈结构具有后进先出的固有特性,在程序设计中很有帮助。这里举一个例子,将栈应用与括号匹配的检验。         假设表达式中允许三种括号:小括号、中括号和大括号,嵌套的顺序任意。( [ ] ) { ...
  • u014715006
  • u014715006
  • 2015-04-04 16:19:21
  • 3777
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 2862
    排名: 1万+
    文章存档
    最新评论