Создание переменной в математическом выражении

Я пытаюсь написать приложение на C ++, которое сможет вычислить математическое выражение. Для этого я должен преобразовать инфиксное выражение в постфиксное выражение и затем вычислить значение.

Прежде чем я смогу начать с преобразования инфиксного выражения в постфиксное выражение и вычислить его, я должен сначала создать экземпляр x и y, задав ему значения. У меня вопрос такой. Как я могу найти x и y в строке ‘expr’ в instantiateVariable назначить ему значения (как это сделано в main.cpp) когда его нашли?

Я вполне уверен, что можно использовать цикл for, но как мне это сделать? Любая помощь будет оценена.

main.cpp

int main()
{
Expression expr("x + y + sqrt 25 - 3");

expr.instantiateVariable('x',5);//Set x = 5
expr.instantiateVariable('y',3);//Set y = 3

/*
The output of the following statement should be:

Answer: 10
*/
cout<<"Answer: "<<expr.evaluate()<<endl;
}

и в моей папке заголовка у меня есть следующее:

Expression.h

class Expression
{
public:
Expression(string expr);
~Expression();
void instantiateVariable(char name, int value);
int evaluate();
};

-2

Решение

Я бы пошел наивно Shunthing-ярд. Принцип прост:

  1. Достигните каждого операнда и поместите их в очередь
  2. Каждый раз, когда вы сталкиваетесь с оператором, кладите его в стек
  3. Если оператор на вершине стека имеет более высокий приоритет, вставьте его и добавьте в очередь (его нужно сначала вычислить)
  4. Продолжайте до конца выражения и затем вставляйте все в очередь

Поддержка этого метода также проста.

Некоторый синтаксический анализ, очевидно, необходим (точнее, токенизация), но это будет довольно просто.

2

Другие решения


По вопросам рекламы [email protected]