ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 10) онлайн

Пример разбора строки

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

В нашем следующем примере мы покажем, как разобрать арифметическое выражение типа: 6/3+2*3-1

Пользователь вводит выражение, программа обрабатывает его знак за зна- ком, определяя, что означает каждый знак в арифметических терминах, и выда- ет результат (7 для нашего примера). В этом выражении использованы четыре арифметических операции: +, -, * и /. Мы упростили нашу задачу, ограничив- шись числами от 0 до 9. Также мы не будем рассматривать скобки.

В этой программе мы будем использовать класс Stack (см. пример STAKARAY главы 7). Модифицируем этот класс, чтобы он мог хранить данные типа char. Мы используем стек для хранения выражения в виде символов. Стек удобно использовать при разборе выражений. Нам часто приходится обращаться к по- следнему из сохраненных символов, а стек является контейнером типа «послед- ний вошел — первый вышел».

Кроме класса Stack, мы будем использовать класс express, представляющий целые арифметические выражения. Методы этого класса позволят нам ини- циализировать объект выражением в форме строки (введенной пользовате- лем), разобрать это выражение и возвратить результат арифметического вы- ражения.

Значение

Описание

< 0

s1 идет перед s2

0

s1 и s2 одинаковы

> 0

s1 идет после s2

 

44