Калькулятор для выполнения n вычислений

В следующем коде калькулятор считает только два значения, и мне нужно сделать калькулятор, который может выполнять n вычислений (например, сложение и вычитание умножения деления).

private void result()
{
    String op;
    int iOp = 0;
    if (tb.Text.Contains("+"))
    {
        iOp = tb.Text.IndexOf("+");
    }
    else if (tb.Text.Contains("-"))
    {
        iOp = tb.Text.IndexOf("-");
    }
    else if (tb.Text.Contains("*"))
    {
        iOp = tb.Text.IndexOf("*");
    }
    else if (tb.Text.Contains("/"))
    {
        iOp = tb.Text.IndexOf("/");
    }
    else
    {
        //error    
    }

    op = tb.Text.Substring(iOp, 1);
    double op1 = Convert.ToDouble(tb.Text.Substring(0, iOp));
    double op2 = Convert.ToDouble(tb.Text.Substring(iOp + 1, tb.Text.Length - iOp - 1));

    if (op == "+")
    {
        tb.Text += "=" + (op1 + op2);
    }
    else if (op == "-")
    {
        tb.Text += "=" + (op1 - op2);
    }
    else if (op == "*")
    {
        tb.Text += "=" + (op1 * op2);
    }
    else
    {
        tb.Text += "=" + (op1 / op2);
    }
}

Вы имеете в виду, что хотите разрешить пользователю вводить строку типа "1 + 2 - 5 * 4 / 3"?

Rufus L 10.09.2018 10:57

вы можете рассмотреть возможность использования парсера выражений, такого как github.com/mparlak/Flee

Tim Rutter 10.09.2018 11:03

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

Mr. Squirrel.Downy 10.09.2018 11:16

@Flithor, как это помогает?

nilsK 10.09.2018 11:19

да братан @RufusL

lallu 10.09.2018 11:33

да братан @RufusL

lallu 10.09.2018 11:34

@lallu попробуй Тим Раттер ответить

Mr. Squirrel.Downy 10.09.2018 11:37

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

Rufus L 10.09.2018 12:20
3
8
84
1

Ответы 1

Это сделает то, что вам нужно:

DataTable dt = new DataTable();
tb.Text += "=" + dt.Compute(tb.Text, "").ToString();

Он не хуже любого парсера выражений.

Другие вопросы по теме