利用栈判断字符串括号是否匹配

任务描述

本关任务:基于栈stack数据结构判断字符串中的括号是否匹配,字符串中仅包含如下字符:( ) [ ] { }

相关知识

为了完成本关任务,你需要掌握:1.如何创建一个栈,2.入栈、出栈操作。 算法思想: 输入符号串str; 初始化栈S for(i=0; str[i]!=′\0′; i++) /扫描括号串/ { 若str[i]是左括号,则进栈; 否则str[i]是右括号 {
如果,栈空,则输出匹配不成功,结束函数。
否则弹栈,栈顶元素s[top]与str[i]进行匹配; { 若匹配不成功,则输出匹配不成功,结束函数。 否则继续; } } } 若栈不空,则匹配不成功,否则匹配成功

编程要求

本关的编程任务是补全右侧代码,实现对输入的括号串进行匹配判断, 若匹配成功输出YES,否则输出NO

输入输出说明

输入为单个测试数据,输入长度不超过100的由( ) [ ] { }等符号组成的字符串,判断该字符串中各种括号是否匹配,若匹配成功输出YES,否则输出NO

以下是平台的测试样例:

样例一: 测试输入: {[()]} 预期输出: YES

样例二: 测试输入: [(]) 预期输出: NO

 

 

//括号匹配
#include <iostream>
#include<stack>
#include<string.h>
using namespace std;
int match(char str[]);
int main() 
{

    int success;
    
    char str[100];
    cin >> str;
    success = match(str);
    if (success == 1)
        cout << "YES" << endl;
    else
        cout << "NO" << endl;       
    return 0;
}

int match(char str[])
{
        // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    stack<char>mystack;
    for(int i=0;i<strlen(str);i++){
        char c=str[i];
        if(c=='{'||c=='['||c=='('){
            mystack.push(c);
        }else if(mystack.empty()){
            return 0;
        }else if(c==')'){
            if(mystack.top()!='('){
                return 0;
            }else{
                mystack.pop();
            }
        }else if(c==']'){
            if(mystack.top()!='['){
                return 0;
            }else{
                mystack.pop();
            }
        }else if(c=='}'){
            if(mystack.top()!='{'){
                return 0;
            }else{
                mystack.pop();
            }
        }
    }
    if(mystack.empty())return 1;
    return 0;

    /********** End **********/
}

 

posted @ 2020-11-03 09:00  XXXSANS  阅读(2424)  评论(1编辑  收藏  举报