В общем, вот какая проблема. Решение у меня есть, но хочу спросить совета - может, кто-нибудь что-нибудь более дельное придумает.
В кратце задача такая:
Есть строка, вроде:
strExpression = "22 + 23 * 24"
Так вот, это целая строка. А мне нужно, чтобы она рассчиталась как математическое выражения. Что я намерен сделать:
превратить строку в массив Char, посимвольно проверять, по ходу проверки составлять число. 1 число из выражения составлено, принят знак, принято второе число - посчитано, учитывая знак, и следующее число уже использует вместо 1-ого числа, посчитанное ранее выражение. Знаю, путано объяснил, ну да ладно.
В общем, проблемы следующие:
1) Как быть с приоритетом знаков?
2) Как быть со скобками?
Чую, придется станцевать с бубном, и устроить лабиринт If - Else'ов...
Другие языки программирования и технологии
Нужна маленькая консультация по Visual Basic .NET
Вместо горы If'ов легче и понятнее реализовать через метод рекурсивного спуска. Гугли, инфы полно. К примеру, самое доступное объяснение в серии статей Д. Креншоу "Пишем компилятор", на название не обращай внимание, главное понять принцип, он вполне подходит и для интерпретации мат. выражений.
Я думаю тебе стоит почитать про принципы написания подобного рода парсеров. Наверняка надо использовать регулярные выражения. А приоритет фигня. Главное найти скобик, операнды и сами знаки действий.
Таких программ много написано. Работают они так. Взять левый аргумент, взять правый аргумент. Вычислить результат.
Здесь везде применяется рекурсия а не if else.
При появлении скобок просто начинается вычисление аргумента. К примеру
5*(1+2)
Первый аргумент 5, второй 1+2. При умножении 1+2 автоматически рекурсивно рассматривается как левая часть и правая часть. Левая 1, правая 2. Сложилось, получилось 3. Дальше 5*3 = 15.
Строка рассматривается как набор символов, последовательно слева направо просматривается.
Здесь везде применяется рекурсия а не if else.
При появлении скобок просто начинается вычисление аргумента. К примеру
5*(1+2)
Первый аргумент 5, второй 1+2. При умножении 1+2 автоматически рекурсивно рассматривается как левая часть и правая часть. Левая 1, правая 2. Сложилось, получилось 3. Дальше 5*3 = 15.
Строка рассматривается как набор символов, последовательно слева направо просматривается.
Посмотрите вот эту ссылку:
http://algolist.manual.ru/syntax/parsear.php
Первый алгоритм. Для вашей задачи как раз. При желании можно доработать, чтобы учитывалось старшинство операций.
http://algolist.manual.ru/syntax/parsear.php
Первый алгоритм. Для вашей задачи как раз. При желании можно доработать, чтобы учитывалось старшинство операций.
Я в свое время делал дочке строковый калькулятор с помощью Microsoft VBScript Regular Expressions и Microsoft Script Control. Надо добавить в проект ссылки на них и кинуть на форму ScriptControl1. А потом все просто, ScriptControl сделает все сам:
Правда, это VB6, но к NET можно адаптировать.

Правда, это VB6, но к NET можно адаптировать.
Похожие вопросы
- Подойдет ли самоучитель по Visual Basic .NET для освоения языка Basic, человеку не понимающему в программировании?
- Какая среда программирования нужна для написания программ на Visual Basic .NET
- Возможно ли продать свою программку сделанную на Visual Basic.NET ???
- Люди я собираюсь учить компьютерный язык и у меня вопрос,что лучше...PascalABC или Visual Basic.Net???
- Visual Basic .NET против C#. Кто что может сказать? Чем тот или иной язык лучше или хуже другого?
- Visual Basic .NET при попытке отладки проги пишет, что отладка невозможна, т.к. нет ответа от службы IIS. Где ее взять?
- Продаю программу с исходниками на Visual Basic 2008 за 50 руб.
- Нужна помощь по Visual Basic
- Visual Basic или C#
- visual basic 6