ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В 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 |
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
