zoukankan      html  css  js  c++  java
  • 数据结构之带优先级的括号匹配

    要求:读取一段字符串中的括号,检测括号的左右括号是否匹配,同时还要优先级也要匹配,如小括号内如果有中括号就属于优先级不匹配

    // project1.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include<stack>
    #include<iostream>
    using namespace std;
    
    int priority(char bracket){
        switch(bracket){
        case '(':
            return 1;
        case '[':
            return 2;
        case '{':
            return 3;
        default:
            return -1;
        }
    }
    
    bool match(char a,char b){
        if(a=='(' && b==')')
            return true;
        else if(a=='[' && b==']')
            return true;
        else if(a=='{' && b=='}')
            return true;
        else return false;
    }
    
    bool bracket_match(char exp[]){
        char *ptr=exp;
        stack<char> stk;
        while(*ptr!=''){
            if(*ptr=='('||*ptr=='['|| *ptr=='{'){//左括号
                if(!stk.empty() && priority(stk.top())<priority(*ptr)){
                    cout<<"priority error!"<<endl;
                    return false;
                }
                stk.push(*ptr);
            }
            else if(*ptr==')'||*ptr==']'|| *ptr=='}'){//右括号
                if(! stk.empty() && match(stk.top(),*ptr))
                    stk.pop();
                else {
                    cout<<"bracket not match!"<<endl;
                    return false;
                }
            }
            ptr++;
        }
        cout<<"Match!"<<endl;
        return true;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        char exp1[1000]="{@@$[@#@(#34)]@#@~!}sdff#f[..(dfasdfsdf)](){()}";
        char exp2[1000]="{@@$[@#@(#34)]@#@~!}sdff#f[{..(dfasdfsdf)](){()}";
        char exp3[1000]="{@@$[@#@(#34)]@#@~!}sdff#f[..(dfasdfsdf[])](){()}";
        char exp4[1000]="{@@$[@#@(#34){}]@#@~!}sdff#f[..(dfasdfsdf)](){()}";
        char exp5[1000]="{@@$[[@#@(#34)]@#@~!}sdff#f[..(dfasdfsdf)](){()}";
    
        bracket_match(exp1);
        bracket_match(exp2);
        bracket_match(exp3);
        bracket_match(exp4);
        bracket_match(exp5);
        
        return 0;
    }



    关于优先级的检测,要点在进栈时做个检查就行

  • 相关阅读:
    Java数组和方法
    Java数组
    Java方法升级
    Java流程控制
    Java编译器的常量优化
    chrome使用技巧(看了定不让你失望)
    C 排序法
    mysql 线程池 数据库连接池
    php mysql
    深入剖析PHP输入流 php://input (转载 http://www.nowamagic.net/academy/detail/12220520)
  • 原文地址:https://www.cnblogs.com/abc123456789/p/3433453.html
Copyright © 2011-2022 走看看