Код для проверки сбалансированных скобок во входных данных
Я пытаюсь написать код для проверки пар скобок во входной строке и распечатать либо "успех" (для ввода с совпадающей парой), либо индекс 1 на основе первой несопоставимой закрывающей скобки. Однако я получаю индекс на основе 1 Для даже совпадающих входных скобок. (например. для ввода [ ] я получаю вывод 1 вместо "успеха"). Я понимаю, что в моей логике есть ошибка. Может ли кто-нибудь указать на ошибку?
#include <iostream> #include <stack> #include <string> struct Bracket { Bracket(char type, int position): type(type), position(position) {} bool Matchc(char c) { if (type == '[' && c == ']') return true; if (type == '{' && c == '}') return true; if (type == '(' && c == ')') return true; return false; } char type; int position; }; int main() { std::string text; getline(std::cin, text); int z; int len = text.size(); std::stack <Bracket> opening_brackets_stack; for (int position = 0; position < len ; ++position) { char next = text[position]; Bracket brackObj(next,0); if (next == '(' || next == '[' || next == '{') { opening_brackets_stack.push(brackObj); } if (next == ')' || next == ']' || next == '}') { if(brackObj.Matchc(next) == false || opening_brackets_stack.empty() == false) { z = position; } else { opening_brackets_stack.pop(); } } } if (opening_brackets_stack.empty()==true) { std::cout << "Success"; } else { std::cout << z; } return 0; }
Что я уже пробовал:
Я использую стек, чтобы раздвинуть все открытые скобки и выскочить из них, когда найдется подходящая закрывающая скобка.
Для несоответствующего входа (например, ([{)]) он должен возвращать выход 4 и "успех" для совпадающего входа (например, ({[]})).
[no name]
И когда вы прошли через свой код, изучая значения переменных на каждом этапе пути, что вы обнаружили?
Kishaan Jeeveswaran
Я не инициализировал свое целое число "z". Вы об этом спрашивали?
[no name]
Парень, который пишет код, должен его отлаживать. Вы использовали свой отладчик? Вот для чего он нужен.
Kishaan Jeeveswaran
Я новичок в программировании и раньше не знал об отладчиках. Спасибо, что указали на это! Я использую программное обеспечение Codeblocks. Будет ли отладчик в этом программном обеспечении служить этой цели?
[no name]
Да конечно: http://wiki.codeblocks.org/index.php/Debugging_with_Code::Blocks
Kishaan Jeeveswaran
Спасибо! :)