#include <iostream>
#include <cstring>
#include <cstdio>
#include <stack>
using namespace std;
//char stack[256], top;
bool f( char *str) {
stack<char> zhan;
int len = strlen(str);
//top=0;
if (zhan.empty()) {
for (int i = 0; i < len; i++) {
switch (str[i]) {
case '{':
if (zhan.top() == '[' || zhan.top() == '(' || zhan.top() == '<')
return false;
case '[':
if (zhan.top() == '(' || zhan.top() == '<')
return false;
case '(':
if (zhan.top() == '<')
return false;
case '<':
zhan.push(str[i]);
break;//top++还是++top有问题
case ')':
if (zhan.top() == '(')
zhan.pop();
break;
case '>':
case '}':
case ']':
if (zhan.top() == str[i] - 2)
zhan.pop();
break;
default:
return false;
break;
}
}
}
if (zhan.empty())
return true;
else
return false ;
}
int main() {
int n;
char str[500];
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> str;
f(str) ? cout << "YES" << endl : cout << "NO" << endl;
}
return 0;
}
为什么这个代码显示段错误?求大神解惑!