Przejdź do treści

Rozwiązanie 2

Napisz program zgodny z poniższą specyfikacją. W implementacji wykorzystaj klasę stack.

Specyfikacja

Dane

  • \(nawiasy\) - ciąg składający się jedynie ze znaków reprezentujących nawiasy okrągłe i kwadratowe, tzn.: \((, ), [, ]\)

Wynik

  • TRUE jeżeli podany na wejściu ciąg jest reprezentacją poprawnego nawiasowania, FALSE w przeciwnym przypadku.

Rozwiązanie

#include <iostream>
#include <stack>

using namespace std;

int main() {
    string brackets;
    stack<char> st;
    bool ok = true;

    cin >> brackets;

    for (auto ch : brackets) {
        if (ch == '(' || ch == '[') {
            st.push(ch);
        } else if (ch == ']') {
            if (st.empty() || st.top() != '[') {
                ok = false;
                break;
            }

            st.pop();
        } else {
            if (st.empty() || st.top() != '(') {
                ok = false;
                break;
            }

            st.pop();
        }
    }

    if (ok) {
        cout << "TRUE" << endl;
    } else {
        cout << "FALSE" << endl;
    }

    return 0;
}