У вас есть две специфические проблемы, которые нарушают ваш код.
Во-первых, во второй копии вашего цикла в InputsEqual () вы передаете значение inputA [i], где должно быть указано inputB [i].
bStack.push(inputA[i]); // should be inputB!
Во-вторых, в EqualStack () вы вызываете a.size () на каждой итерации, сравнивая его с i.Проблема в том, что вы также уменьшаете стек, вызывая a.pop (), когда есть совпадение.Это приводит к преждевременному прерыванию цикла for, оставляя стеки непустыми.
Быстрое решение состоит в том, чтобы изменить цикл так, чтобы он заканчивался, когда пусто, например:
for(int i = 0; !a.empty(); i++) // fixed
из:
for(int i = 0; i < a.size(); i++) // broken
Я также хотел бы отметить несколько других вещей, которые можно было бы убрать очень быстро:
return (a.empty() && b.empty()) ? true:false; // redundant
return a.empty() && b.empty(); // better
и:
else if(!aStack.empty())
{
aStack.pop(); // you call it if the stack is empty
}
else
{
aStack.pop(); // and if its not, which is redundant!
}
По моему мнению, pop () для пустых контейнеров не определено, поэтому проверка пустого стека перед вызовом будет хорошей практикой, просто трейлинг-оператор pop () не нужен!Просто сотрите его, и у вас все получится.
Наконец, вы можете избежать inputAorB [i]! = '\ 0', если вы просто проверяете inputAorB.length () вместо length () + 1 вцикл, так что
for(int i = 0 ; i < inputA.length() + 1; i++)
{
if(inputA[i] != '\0')
{
if(inputA[i] != '<')
{
aStack.push(inputA[i]);
}
else if(!aStack.empty())
{
aStack.pop();
}
}
}
можно сократить до:
for(int i = 0 ; i < inputA.length(); i++)
{
if(inputA[i] != '<')
{
aStack.push(inputA[i]);
}
else if(!aStack.empty())
{
aStack.pop();
}
}
Возможно, есть больше очистки, но я решил, что просто укажу на более яркие.Удачи в вашем проекте!