Loading...
daskalov.iv avatar daskalov.iv 17 Точки

Brackets - открий грешката

Здравейте.

Това е задачката с вложените скоби { [ ( ) ] }

Не мога да си открия грешката, въртях условията как ли не, нещо ми убягва.

Ще помоля за малко съдействие.

Ето го кода: 

https://pastebin.com/nH8guhH7

 

Тагове:
0
C++ Fundamentals
MartinBG avatar MartinBG 4803 Точки
Best Answer

При бърз пеглед на решението по зададеното условие, виждам няколко проблема:

1. Функцията brackets може да не отпечата нищо в доста от сценариите, заради използването на retrun в switch-a (функцията прекъсва, без да стигне до частта в края, която печата резултата). Отделно е много лоша практика една функция да се занимава с повече от едно нещо. В този случай, освен за валидация на израза, тя е натоварена и с отпечатване на резултата. По-правилно е типа на функцията да бъде променен от void на bool, който да се използва в main за отпечатване на резултата.

2. Логиката за валидация на израза ще връща грешни резултати за изрази като {[]}, които са напълно валидни по условие, но не и според тази проверка: 

if( square <= 0 || round > 0 || curly > 0) return;

В горният пример, когато проверката стигне до 3-тата скоба (]) ще имаме square == 1, round == 0, но curly == 1, което логиката на програмата третира като грешка.

Аналогично ще фейлне и за изрази като [()], {[()]}, [[()]] и т.н., но в други проверки.

3. Решението с броячи за типовете скоби не е подходящо за решаване на тази задача, защото - както демонстрирах с примера по-горе, не се пази информация за последователността, в която се появяват тези скоби.

Класическото решение на този тип задача е с използването на стек, като в тази тема съм качил едно примерно решение, което може да се адаптира към тази задача (трябва да се добави проверката за правилна йерархия на типовете скоби).

 

Упех!

0
06/01/2018 13:51:42
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.