美文网首页
判断括号匹配问题

判断括号匹配问题

作者: lidedongsn | 来源:发表于2018-03-29 16:26 被阅读4次

    问题描述

    给定一个字符串,其中的字符包含任意字符包括三种括号:花括号{ }、中括号[ ]、圆括号( )。设计算法,判断该字符串是否有效,即字符串中括号是否匹配。括号匹配要求括号必须以正确的顺序配对,如 “{ [ ] ( ) }” 或 “[ ( { } [ ] ) ]” 等为正确的格式,而 “[ ( ] )” 或 “{ [ ( ) }” 或 “( { } ] )” 均为不正确的格式。

    c++版本

    #include <iostream>
    #include <stack>
    #include <string.h>
    
    bool is_left(char c) {
        if (c == '(' || c == '{' || c == '[') {
            return true;
        } 
    
        return false;
    }
    
    bool is_right(char c) {
        if (c == ')' || c == '}' || c == ']') {
            return true;
        } 
    
        return false;
    }
    
    bool is_match(char left, char right) {
        if (right == ')') {
            return left == '(';
        }
        if (right == '}') {
            return left == '{';
        }
        if (right == ']') {
            return left == '[';
        }
    
        return false;
    }
    
    bool is_brackets_match(char *s) {
        std::stack<char> ch;
        while(*s != '\0') {
            if(is_left(*s)) {
                ch.push(*s);
            }else if (is_right(*s)) {
                if(ch.empty()) {
                    return false;
                }
                if (!is_match(ch.top(), *s)) {
                    return false;
                }
                ch.pop();
            }
    
            s++;
        }
    
        if (ch.empty()) {
            return true;
        }
    
        return false;
    }
    
    
    int main() {
    
        char *p  = "{{test]()}";
        //char *p  = "{([test])}";
        if (is_brackets_match(p)) {
            std::cout << "brackets is matched!" << std::endl;
        }else {
            std::cout << "brackets is not matched!" << std::endl;
        }
        return 0;
    }
    
    
    
    

    相关文章

      网友评论

          本文标题:判断括号匹配问题

          本文链接:https://www.haomeiwen.com/subject/uavmcftx.html