主要是用栈来实现,左括号进栈,右括号则与栈顶元素检验是否匹配,栈空时仍有右括号或者没有右括号但栈不空都为不匹配。其他字符、数字略过。
#include <iostream>
#include <stack>
#include <string>
using namespace std;
bool BracketCheck(string str) {
stack<char> S;
int i = 0;
while (str[i] != '\0') {
switch (str[i]) {
case '(':
case '[':
case '{':
S.push(str[i]);
break;
case ')':
if (S.empty())
return false;
if (S.top() != '(')
return false;
else
S.pop();
break;
case ']':
if (S.empty())
return false;
if (S.top() != '[')
return false;
else
S.pop();
break;
case '}':
if (S.empty())
return false;
if (S.top() != '{')
return false;
else
S.pop();
break;
default:
break;
}
i++;
}
if (!S.empty()) {
return false;
} else {
return true;
}
}
int main() {
string str = "{[(a+b)*c+d*e]*f+g}*h)";
if (BracketCheck(str) == false)
cout << "匹配失败" << endl;
else
cout << "匹配成功" << endl;
return 0;
}
主要参考: 《数据结构与算法》(第五版)张岩
《数据结构考研复习指导》(王道)