Я делаю Сбалансированный брекет, используя стек.Мне нужно отобразить «Успех», если он совпадает, или вывести индекс (1-индексирование) первого несоответствия.
Я использовал stack<pair <char,int>>stk; string s;
для хранения открывающей скобки ('{' '(' '[')) и индекс скобки. (Я сохранил индекс для таких случаев, как эти «[{}», где несоответствие является открывающей скобкой, а не закрывающей.
for(int i=0;i<s.size();i++)
{
if(s[i]=='{' || s[i]=='[' || s[i]=='(')
{
stk.push(make_pair(s[i],i+1));
}
else if(!stk.empty() && (s[i]=='}' && stk.top().first=='{') ||
(s[i]==')' && stk.top().first=='(') || (s[i]==']' &&
stk.top().first=='['))
{
stk.pop();
}
else if(!stk.empty() && (s[i]=='}' && stk.top().first!='{') ||
(s[i]==')' && stk.top().first!='(') || (s[i]==']' &&
stk.top().first!='['))
{
ans=(i+1);
cout<<ans;
break;
}
else if(stk.empty()&&(s[i]=='}'||s[i]==')'||s[i]==']'))
{
ans=i+1;
cout<<ans;
break;
}
}
if(stk.empty() && ans==0)
{
cout<<"Success";
}
if(!stk.empty() && ans==0)
{
cout<<stk.top().second;
}
Я получаю ошибку сегментации (ядро сброшено)всякий раз, когда первый символ строки является одним из закрывающих скобок (')' или ']'). Он работает при вводе '}', но теперь, когда ')' или ']'