Как поймать ошибку? с++
Есть задача "Правильная скобочная последовательность" Вот текст : Правильная скобочная последовательность Рассмотрим последовательность, состоящую из круглых, квадратных и фигурных скобок. Программа должна определить, является ли данная скобочная последовательность правильной.
Пустая последовательность является правильной. Если 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;
}