判断括号匹配问题

2018-03-29  本文已影响4人  lidedongsn

问题描述

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

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;
}



上一篇下一篇

猜你喜欢

热点阅读