Оценка математического выражения в виде текста - PullRequest
1 голос
/ 21 января 2012

Я пытаюсь создать программу, подобную калькулятору, в которой можно было бы ввести вычисление в текстовое поле, и оно преобразовало бы это вычисление в int с результатом, вот что у меня есть, но оно не работает много

string calcStr = textBox1.Text;
int result = calcStr;

Есть предложения, которые не слишком сложны?

Ответы [ 3 ]

2 голосов
/ 21 января 2012

Если я правильно понял проблему, вы хотите иметь возможность анализировать выражения типа 1 + 3 + 4 из текстового поля и выполнять вычисления на основе входных данных.Это на самом деле сложнее, чем можно подумать.

Одним из распространенных решений является использование алгоритма Shunting-yard для анализа выражения.Подробнее см. http://en.wikipedia.org/wiki/Shunting-yard_algorithm.

1 голос
/ 21 января 2012

Используйте NCalc для такой работы ... она бесплатна, поставляется с источником и выполняет всю тяжелую работу (анализ математического выражения и т. Д.) И дает вам результат вычисления.

0 голосов
/ 21 января 2012

Если вы пытаетесь просто разобрать число из строки, используйте функцию типа

Int32.Parse(string)

Если вам нужно вывести уравнение, например «3 + 4/2», тогда выВам нужно будет извлекать каждый символ по одному и определять, что это такое.

Как если бы строка была "32 + 4/12", вам нужно было бы перебрать все символы в строке и попробоватьпроанализировать текущий символ в число.Theres функция для проверки, если это число или нет.или просто проверьте значение ascii.

в случае успеха возьмите текущий номер плюс следующий и повторите попытку, пока не наберете нецифровый символ.Теперь вы можете извлечь свои номера.Символы, которые не являются числами, проверяются математическими операторами, которые вы разрешаете.Все остальное выдает ошибку.

Как только вы сможете извлечь все уравнение целиком, вам, вероятно, придется сделать что-то вроде операций со стеком, чтобы оценить его.Я полагаю, что в моем классе Assembly вы поместите числа и операторы в стек, а затем добавите их по одному сверху сверху, оценивая предыдущее число следующим оператором между ними.

Я надеюсь, что это то, о чем вы говорили.Желаем удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...