Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

In số thứ tự ngoặc trong biểu thức C++

Cho biểu thức chỉ chứa dấu ngoặc. In số thứ tự của từng cặp ngoặc. Ví dụ: "((()())())" → 1 2 3 3 4 4 2 5 5 1. Mở ngoặc: in số thứ tự tăng. Đóng ngoặc: in số của ngoặc mở tương ứng (lấy từ stack).

Stack theo dõi cặp ngoặc

Biến left=1 đếm ngoặc mở. Stack lưu số thứ tự. Gặp '(' → in left, push left, left++. Gặp ')' → in stack.top(), pop.

Ví dụ minh họa

#include <bits/stdc++.h>
using namespace std;

void printBracketNumbers(string expr) {
    int left = 1;
    stack st;
    
    for (char c : expr) {
        if (c == '(') {
            cout << left << ' ';
            st.push(left);
            left++;
        } else if (c == ')') {
            cout << st.top() << ' ';
            st.pop();
        }
    }
}

int main() {
    string expr = "()((())()())";
    printBracketNumbers(expr);
    return 0;
}

Kết quả

1 1 2 3 4 4 3 5 5 6 6 2