-
Notifications
You must be signed in to change notification settings - Fork 0
/
pdd2.cpp
68 lines (67 loc) · 2.03 KB
/
pdd2.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <string>
#include <stack>
using namespace std;
bool isExpression (string& str) {
int len = str.size();
stack< char > s;
int bracketLevel = 0; //4.记录括号等级,避免{} 和 []
for (int i = 0; i < len; i++) {
char c = str[i];
switch (c) {
case '{': {
if (s.empty() || (!s.empty()) && s.top() == '{') { //5.大括号可以连续嵌套
s.push (str[i]);
bracketLevel = 2;
} else return false;
}
break;
case '[': {
if (s.empty() || (!s.empty()) && s.top() == '{') { //3.括号嵌套优先级
s.push (str[i]);
bracketLevel = 1;
} else return false;
}
break;
case '(': {
if (s.empty() || (!s.empty()) && (s.top() == '[')) {
s.push (str[i]);
bracketLevel = 0;
} else return false;
}
break;
case '}': {
if (s.empty() || bracketLevel) return false;
if (s.top() == '{') //2.左右括号匹配
s.pop();
else return false;
}
break;
case ']': {
if (s.empty() || bracketLevel) return false;
if (s.top() == '[')
s.pop();
else return false;
}
break;
case ')': {
if (s.empty() || bracketLevel) return false;
if (s.top() == '(')
s.pop();
else return false;
}
break;
default:
;
}
}
return (s.empty()) ? true : false; //1.s不空说明右边符号不够用
}
int main() {
char cs[100000];
gets_s (cs);
string str (cs);
bool legal = isExpression (str);
cout << legal;
return 0;
}