首页 > Windows开发 > 详细

C# - 10以内的加减乘除

时间:2020-07-19 20:50:31      阅读:130      评论:0      收藏:0      [点我收藏+]

 

 

    class Program
    {
        static void Main(string[] args)
        {
            var source = "5+2*2-3*4/2";
            var result = Cal(source);
            Console.WriteLine(result);
        }

        static int Cal(string str)
        {
            var numStack = new Stack<int>();//存储数字的栈
            var opStack = new Stack<char>();//存储操作符的栈
            int result;
            foreach (var c in str)
            {
                if (IsNumeric(c, out var i))
                {
                    numStack.Push(i);
                    continue;
                }

                while (opStack.Count > 0)
                {
                    var f = Check(c, opStack);
                    if (f)
                    {
                        break;
                    }
                    result = Cal(numStack, opStack);
                    numStack.Push(result);
                }
                opStack.Push(c);
            }
            result = Cal(numStack, opStack);
            numStack.Push(result);
            return result;
        }

        /// <summary>
        /// 判断是否是数字
        /// </summary>
        /// <param name="c"></param>
        /// <param name="i"></param>
        /// <returns></returns>
        static bool IsNumeric(char c, out int i)
        {
            var pattern = @"^\d+$";
            var rgx = new Regex(pattern);
            var flag = rgx.IsMatch(c.ToString());
            i = 0;
            if (flag)
            {
                i = Convert.ToInt32(c.ToString());
            }
            return flag;
        }

        /// <summary>
        /// 判断当前操作符的优先级是否高于栈顶的操作符
        /// </summary>
        /// <param name="c"></param>
        /// <param name="opStack"></param>
        /// <returns></returns>
        static bool Check(char c, Stack<char> opStack)
        {
            char op = opStack.Peek();
            if (op == * || op == /)
            {
                return false;
            }

            if (c == * || c == /)
            {
                return true;
            }
            return false;
        }

        /// <summary>
        /// 计算
        /// </summary>
        /// <param name="numStack"></param>
        /// <param name="opStack"></param>
        /// <returns></returns>
        static int Cal(Stack<int> numStack, Stack<char> opStack)
        {
            var num1 = numStack.Pop();
            var num2 = numStack.Pop();
            char op = opStack.Pop();
            switch (op)
            {
                case +:
                    return num2 + num1;
                case -:
                    return num2 - num1;
                case *:
                    return num2 * num1;
                case /:
                    return num2 / num1;
                default:
                    throw new Exception("not valid op");
            }
        }
    }

 

C# - 10以内的加减乘除

原文:https://www.cnblogs.com/refuge/p/13340778.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!