判断括号匹配问题
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;
}