问题描述
假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序任意,如()或[([][])]等为正确的匹配,[(])或(或(()))均为错误的匹配。 现在的问题是,要求检验一个给定的表达式中的括弧是否正确匹配? 输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出“OK”,不匹配就输出“Wrong”。
输入格式
输入一行字符(字符个数小于255)。
输出格式
数据匹配就输出“OK”,不匹配就输出“Wrong”。
样例
输入
[(])
输出
Wrong
解决方案
思路
栈
代码
#include <iostream>
#include <stack>
using namespace std;
int main() {
string buf;
cin >> buf;
stack<char> s;
for (int i = 0; i < buf.size(); ++i) {
if (buf[i] == '[' || buf[i] == '(') {
s.push(buf[i]);
} else {
if (s.empty()) {
cout << "Wrong";
return 0;
}
char c = s.top();
s.pop();
if ((c == '(' && buf[i] != ')') || (c == '[' && buf[i] != ']')) {
cout << "Wrong";
return 0;
}
}
}
if (!s.empty()) {
cout << "Wrong";
return 0;
}
cout << "OK";
return 0;
}