zoukankan      html  css  js  c++  java
  • 计算任意一个数学运算表达式字符串的值

    题:写一个方法计算任意一个数学运算表达式字符串,不区分优先级

    例:
    "9+8*2"=34
    "2-8*9+3"=-51
    "2*2*2*2*2"=32
    "0"=0

    //===========================代码 Begin==============================

        /// <summary>
        /// 传入一个数学运算的表达示字符串不区分优级计算返回其结果
        /// </summary>
        protected string ComputeMathStr(string exStr)
        {
            //去除空字符
            exStr = Regex.Replace(exStr.Trim(), " *", "");

            //匹配字符串是否是以两个数的操作开头
            Match ma = Regex.Match(exStr, @"^(-?d+)([+-*/])(d+)");

            if (ma.Success)//匹配成功,计算
            {
                string firstStr = ma.Groups[0].Value.ToString();//获取匹配的字符串:如2+3

                int num1 = int.Parse(ma.Groups[1].Value.ToString());//第一个数值
                string opr = ma.Groups[2].Value.ToString();//操作符
                int num2 = int.Parse(ma.Groups[3].Value.ToString());//第二个数值

                string newStr = exStr.Substring(firstStr.Length);//获取后面剩余的字符串
                return ComputeMathStr(GetResultByOperator(opr, num1, num2) + newStr);//递归运算其结果,直到不能匹配为止
            }
            else//匹配失败,直接返回结果
            {
                return exStr;
            }
        }

        /// <summary>
        /// 根据操作符计算两个数的值并返回结果
        /// </summary>
        protected int GetResultByOperator(string opr,int num1,int num2)
        {  
            switch (opr)
            {
                case "+":
                    return num1 + num2;
                case "-":
                    return num1 - num2;
                case "*":
                    return num1 * num2;
                case "/":
                    if (num2 == 0)
                    {
                        throw new Exception("尝试除以零!");
                    }
                    return num1 / num2;
                default:
                    return 0;
            }
       
        }
    //===========================代码 End==================================

  • 相关阅读:
    isalnum()方法
    index()方法
    find()方法
    expandtabs()方法
    endswith()方法
    encode()方法
    bytes.decode()方法
    count()方法
    center()方法
    capitalize()方法
  • 原文地址:https://www.cnblogs.com/lt-style/p/3455883.html
Copyright © 2011-2022 走看看