Как поймать ошибку? с++

Есть задача "Правильная скобочная последовательность" Вот текст : Правильная скобочная последовательность Рассмотрим последовательность, состоящую из круглых, квадратных и фигурных скобок. Программа должна определить, является ли данная скобочная последовательность правильной.

Пустая последовательность является правильной. Если A — правильная, то последовательности (A), [A], {A} — правильные. Если A и B — правильные последовательности, то последовательность AB — правильная. Задачу я вроде решил , но она выкидывает ошибку при определённых тестах(')','{}{}{}}{{}{})()()()){} '...).Провал писать try catch, но не вышло ;(.

#include <iostream>
#include <cassert>
#include "string"
#include "stack"
using namespace std;


int main() {
    string tab;
    getline (cin, tab);
    stack<char> st;
    for (int i =0  ; i < tab.length(); i++)  {
        try {
            if (tab[i] == '(') {
                st.push(tab[i]);
            }
            if (tab[i] == ')' && st.top() == '(') {
                st.pop();

            }
            if (tab[i] == '[') {
                st.push(tab[i]);
            }
            if (tab[i] == ']' && st.top() == '[') {
                st.pop();


            }
            if (tab[i] == '{') {
                st.push(tab[i]);
            }
            if (tab[i] == '}' && st.top() == '{') {
                st.pop();
            }
        }
        catch (...) {
            cout << "no";
        }

    }

    if(st.size() != 0) {
        cout << "no";
    } else cout <<"yes";


        return 0;
    }

Ответы (0 шт):