1+ #include < iostream>
2+ #include < string>
3+ #include < stdexcept>
4+ class Stack {
5+ private: // abstraksi dynamic array
6+ int size;
7+ int capacity;
8+ char * arr;
9+ private:
10+ std::string s;
11+ public:
12+ // default constructor
13+ Stack ()noexcept {
14+ this ->capacity = 1 ;
15+ this ->size = 0 ;
16+ this ->s = " " ;
17+ this ->arr = new char [capacity];
18+ }
19+ // constructor
20+ Stack (int capacity,std::string s){
21+ this ->capacity = capacity;
22+ this ->size = 0 ;
23+ this ->s = s;
24+ this ->arr = new char [capacity];
25+ }
26+ private: // method valid parantheses
27+ bool is_open (char bracket){
28+ if (bracket == ' {' ){
29+ return true ;
30+ }
31+ if (bracket == ' (' ){
32+ return true ;
33+ }
34+ if (bracket == ' [' ){
35+ return true ;
36+ }
37+ return false ;
38+ }
39+ bool is_close (char bracket){
40+ if (bracket == ' }' ){
41+ return true ;
42+ }
43+ if (bracket == ' )' ){
44+ return true ;
45+ }
46+ if (bracket == ' ]' ){
47+ return true ;
48+ }
49+ return false ;
50+ }
51+ bool is_matching (char open,char close){
52+ if (open == ' {' && close == ' }' ){
53+ return true ;
54+ }
55+ if (open == ' (' && close == ' )' ){
56+ return true ;
57+ }
58+ if (open == ' [' && close == ' ]' ){
59+ return true ;
60+ }
61+ return false ;
62+ }
63+ std::string parser (){
64+ std::string res;
65+ for (int i = 0 ;i < this ->s .size ();i++){
66+ if (isalnum (s[i])){
67+ res.push_back (s[i]);
68+ }
69+ }
70+ return res;
71+ }
72+ private: // getter stack
73+ char top ()const noexcept {
74+ return arr[size - 1 ];
75+ }
76+ bool is_empty ()const noexcept {
77+ if (size == 0 ){
78+ return true ;
79+ }
80+ return false ;
81+ }
82+ private:
83+ void push (const char & bracket)noexcept {
84+ arr[size] = bracket;
85+ size++;
86+ }
87+ void pop (){
88+ if (size == 0 ){
89+ throw std::runtime_error (" Stack kosong" );
90+ }
91+ arr[size - 1 ] = 0 ;
92+ size--;
93+ }
94+ public:
95+ bool valid_parantheses (){
96+ std::string res = parser ();
97+ for (int i = 0 ;i < res.size ();i++){
98+ if (is_open (res[i])){
99+ // push ke stack
100+ arr[size] = res[i];
101+ size++;
102+ }else if (is_close (res[i])){
103+ // jika kosong maka tidak ada pasangan
104+ if (is_empty ()){
105+ return false ;
106+ }
107+ // jika tidak matching langsung return false
108+ if (!is_matching (arr[size - 1 ],res[i])){
109+ return false ;
110+ }
111+ // pop jika matching
112+ arr[size - 1 ] = 0 ;
113+ size--;
114+ }
115+ }
116+ return true ;
117+ }
118+ void result (){
119+ if (valid_parantheses ()){
120+ std::cout << " Bracket valid" << std::endl;
121+ }else {
122+ std::cout << " Bracket tidak valid" << std::endl;
123+ }
124+
125+ }
126+ };
127+ int main (){
128+ Stack* stack1 = new Stack (100 ," (a+b)" );
129+ stack1->result ();
130+ // Your code here
131+ std::cin.get ();
132+ return 0 ;
133+ }
0 commit comments