コード例 #1
0
        public static int Calculate(string expression)
        {
            int firstNumber = 0;
            int i = 0;
            bool isNegative = false;

            if (expression[0] == '-')
            {
                isNegative = true;
                ++i;
            }

            while (expression[i] >= '0' && expression[i] <= '9')
            {
                firstNumber = firstNumber * 10 + (int)expression[i] - 48;
                ++i;
                if (i == expression.Length)
                {
                    if (isNegative)
                    {
                        firstNumber = 0 - firstNumber;
                    }
                    return firstNumber;
                }
            }

            if (isNegative)
            {
                firstNumber = 0 - firstNumber;
            }

            int operationPlace = i;
            ++i;
            int secondNumber = 0;

            while (i < expression.Length)
            {
                secondNumber = secondNumber * 10 + (int)expression[i] - 48;
                ++i;
            }

            var calc = new StackCalculator(new Stack());
            calc.Push(firstNumber);
            calc.Push(secondNumber);
            switch (expression[operationPlace])
            {
                case '/':
                    calc.Divide();
                    break;
                case '*':
                    calc.Multiply();
                    break;
                case '+':
                    calc.Add();
                    break;
                case '-':
                    calc.Subtract();
                    break;
            }
            return calc.Result();
        }