Проверка правильности расстановки скобок - C++

Модераторы: Romeo, Hawk, Absurd, WinMain, DeeJayC

Ответить
Kateeeeeeee
Сообщения: 1
Зарегистрирован: 04 янв 2018, 15:20

Проверка правильности расстановки скобок - C++

Сообщение Kateeeeeeee » 04 янв 2018, 15:24

Помогите, пожалуйста, в написании счетчика скобок. Только новичок в программирование. Что-то пыталась сделать . Начало программы выглядит так. В вектор записывается выражение со скобками (например: {{a|c}f{s|g}}) и оно должно проверяться на правильность расстановки скобок.

Код: Выделить всё

#include<iostream>
#include<vector>
#include<string>

int main(){
setlocale(LC_ALL, "");
int rb = -1;
int lb = -1;
int k;
std::cout << "Введите размер:";
std::cin >> k;
std::cout << "Введите строку";
std::vector<char> myVector(k);
for (int i = 0; i < myVector.size(); i++){
std::cin >> myVector[i];



Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Re: Проверка правильности расстановки скобок - C++

Сообщение Romeo » 04 янв 2018, 22:26

Всё куда проще. Баланс скобок проверяется в один проход без всяких стеков. Абсурд слишком общий алгоритм линканул.

Код: Выделить всё

Целое Счётчик = 0;

Цикл по всем символам строки
{
   Если символ == '{' Тогда Увеличить(Счётчик);
   Иначе
      Если символ == '}' Тогда Уменьшить(Счётчик);

   Если Счётчик < 0 Тогда
   {
      Ошибка("Закрывающая скобка идёт раньше открывающей");
      Выйти;
   }
}

Если Счётчик <> 0 Тогда Ошибка("Нарушен баланс скобок, не хватает закрывающей скобки");
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

garmayev
Сообщения: 26
Зарегистрирован: 19 дек 2013, 16:40
Откуда: Irkutsk
Контактная информация:

Re: Проверка правильности расстановки скобок - C++

Сообщение garmayev » 13 янв 2018, 18:45

Romeo писал(а):Всё куда проще. Баланс скобок проверяется в один проход без всяких стеков. Абсурд слишком общий алгоритм линканул.

выполняется лишь баланс, а не правильность выражения

Пусть уж на основе общих примеров учат логику и принципы программирования?

Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Re: Проверка правильности расстановки скобок - C++

Сообщение Romeo » 14 янв 2018, 01:28

Я не против общих подходов, но по постановке задачи, вроде как, достаточно баланса.

Меня мой первый преподаватель по основами программирования научил великолепному принципу KISS. Расшифровывается как "Keep it simple, stupid", или "Сделай это проще, дурак". Отлично разбираюсь в архитектуре, чту GOFа, Майерса, Фаулера и Кириевски. Тем не менее, пронёс этот принцип через всю свою карьеру и ни разу об этом не пожалел. Советую это и вам.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

Ответить