Ю12.31

Задача: строка содержит арифметическое выражение, состоящее из целых чисел и знаков операции: [latex]+,-,*,/[/latex]  (без скобок). Проверить корректность выражения (в смысле последовательности чисел и знаков операции)

Тесты: 

Выражение Ответ Комментарий
-1+2-3/4*5 Верно Работает
-1 Верно Работает
-1/-4 Верно Работает
5—4 Верно Работает
1 Верно Работает
54-*3//6 Ошибка Работает. Неправильная последовательность
5/0+42 Ошибка Работает. Деление на ноль
5/ Ошибка Работает. После символа должно следовать число

Объяснение переменных:

string a  — строка для ввода.

bool rightness  — булева переменная для фиксирования ошибочного выражения.

Код:  Проверить на ideone.

Алгоритм выполнения описан в комментариях в коде.

 

Особенности:

  1. Удобно предположить, что изначально выражение верно. И в случае отсутствия ошибок, переменной rightness присваивать ничего не нужно будет.

Итог работы:

Код проверяет правильность выражения (последовательность чисел и знаков) с учётом унарного минуса (но не плюса)*, так-же за ошибку считается деление на ноль. Примеры применения есть в тестах.

* — легко реализовать посредством удаления a[0] == '+' из соответствующих if’ах, но не стал, так как считаю унарный плюс бессмысленным.

Related Images: