Я делаю программу на C ++, которая выполняет некоторые основные функции исчисления. Чтобы создать уравнение для выполнения этих функций, я использую следующий код:
float equationone(float x)
{
return sqrt(x);
}
float equationtwo(float x)
{
return (x * x);
}
Мне интересно, как я могу адаптировать свой код, чтобы пользователь мог ввести что-то вроде sqrt(x)
или же (x*x)
и функции возвращают правильный ответ.
Это не так тривиальная задача, потому что вы скоро захотите иметь круглые скобки, операторные приоритеты и так далее.
Вам нужно создать синтаксический анализатор. Если вы хотите научиться создавать его с нуля, попробуйте найти ANTLR. Вы в основном делегируете инструмент для создания кода, который нелегко создать вручную. Конечно, вам нужно научиться писать грамматические определения, но это, вероятно, окупится в будущем. Если вместо этого вам нужно в кратчайшие сроки обслужить реального клиента с помощью языка сценариев, подумайте о чем-то другом, кроме c ++.
Посмотри на этот другой ответ на Stackoverflow.
Вам нужно написать анализатор, чтобы разбить строку на компоненты (числа, операторы и т. Д.), А затем использовать обратная полировка обработать это. На странице есть ссылки о том, как конвертировать в инфиксную нотацию для обратной польской нотации. LEX / YACC может помочь вам сделать немного разбора.