Hãy xem xét chúng ta có một biểu thức với dấu ngoặc. Nếu chỉ số của một dấu ngoặc bắt đầu được đưa ra, chúng ta phải tìm dấu ngoặc kết thúc đóng của dấu ngoặc nhọn đó. Vì vậy, nếu biểu thức như sau:(25 * 6 + (88-32 + (50/10) +20)) và chỉ số của dấu ngoặc mở là 6, thì dấu ngoặc đóng sẽ ở vị trí 23.
Ở đây chúng ta sẽ sử dụng cấu trúc dữ liệu ngăn xếp để giải quyết vấn đề này. Chúng tôi sẽ duyệt qua biểu thức từ chỉ mục đã cho và bắt đầu đẩy các dấu ngoặc mở, khi tìm thấy dấu ngoặc đóng, sau đó là phần tử bật lên từ ngăn xếp, khi ngăn xếp trống, sau đó trả về chỉ mục.
Ví dụ
#include<iostream> #include<stack> using namespace std; void getEndingBracketIndex(string exp, int index){ int i; if(exp[index]!='('){ cout << exp << "Closing bracket of parentheses started at " << index << " present at index -1\n"; return; } stack <int> stk; for(i = index; i < exp.length(); i++){ if(exp[i] == '(') stk.push(exp[i]); else if(exp[i] == ')'){ stk.pop(); if(stk.empty()){ cout << exp << ", Closing bracket of parentheses started at " << index << " present at index " << i << ""; return; } } } cout << exp << ", Closing bracket of parentheses started at " << index << " present at index -1"; } int main() { getEndingBracketIndex("(25*6+(88-32+(50/10)+20))", 6); }
Đầu ra
(25*6+(88-32+(50/10)+20)), Closing bracket of parentheses started at 6 present at index 23