zoukankan      html  css  js  c++  java
  • 利用栈判断字符串括号是否匹配

    任务描述

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

    相关知识

    为了完成本关任务,你需要掌握:1.如何创建一个栈,2.入栈、出栈操作。 算法思想: 输入符号串str; 初始化栈S for(i=0; str[i]!=′′; 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 **********/
    }
  • 相关阅读:
    Oracle数据库容灾备份技术探讨
    asp.net 生成、解析条形码和二维码
    推荐一些C#相关的网站、资源和书籍
    内部集群的 DNS server 搭建
    Nginx 负载均衡
    webpack技巧:动态批量加载文件
    Mock.js使用
    @vue/cli 项目编译重复命中缓存问题解析
    用React hooks实现TDD
    从 React 切换到 Vue.js
  • 原文地址:https://www.cnblogs.com/xxxsans/p/13917621.html
Copyright © 2011-2022 走看看