从字符串(+,-,/,*)计算数学方程式

时间:2019-09-06 14:05:40

标签: c#

我正在尝试为超基本计算创建一个小数学库,例如:加法,减法,乘法和除法。

但是我的“解析”方法存在问题,该方法应该用作通过将所有变量连同字符串拆分为单独的变量(例如“ 5 * 5 + 2”)来计算包含在字符串中的方程的方法变成:

    private static double Parse(string ParseEquation)
    {
        string[] split = Regex.Split(ParseEquation, @"(?<=[+-/*])");

        List<string> keywords = new List<string>();

        foreach (string i in split)
        {
            var var1 = Regex.Match(i, @"\d+").Value;
            keywords.Add(var1);

            var var2 = Regex.Match(i, @"([+-/*])").Value;
            keywords.Add(var2);
        }

        double sum = 0;

        for (int i = 0; i < keywords.Count - 1; i++)
        {
            string keyword = keywords[i + 1];

            if (keyword == "+")
                sum = Addition(sum, double.Parse(keywords[i]));
            if (keyword == "-")
                sum = Subtraction(sum, double.Parse(keywords[i]));
            if (keyword == "/")
                sum = Division(sum, double.Parse(keywords[i]));
            if (keyword == "*")
                sum = Multiplication(sum, double.Parse(keywords[i]));
        }
        return sum;
    }

我当前的代码:

#content {
width: 300px;
    height: 100px;
        position: relative;
    }
#box{
width: 300px;
    height: 100px;
    overflow: hidden;
    position: relative;
    background: orange;
}
input[type='button']{
position: absolute;
    right:-30px;
    z-index:1000;
    float: right;
    top: 20px;
}

Addition(),Subtraction(),Divion()和Multiplication()这些方法可以按预期工作(通过单元测试进行测试)。

所以我需要有关Parse方法更改内容的帮助,因为无论我尝试什么,输出总是错误的。

(完整代码:hastebin

2 个答案:

答案 0 :(得分:2)

通过以下更改解决了您的问题。

  1. 用第一个数字初始化您的sum

    double sum = double.Parse(keywords[0]);
    
  2. 将for循环更改为2并从2开始循环

    for (int i = 2; i < keywords.Count - 1; i += 2)
    
  3. 更改关键字以在i-1之前获取它

    string keyword = keywords[i - 1];
    

这些更改将得到结果27

这是完整的代码:

private static double Parse(string ParseEquation)
{
    string[] split = Regex.Split(ParseEquation, @"(?<=[+-/*])");

    List<string> keywords = new List<string>();

    foreach (string i in split)
    {
        var var1 = Regex.Match(i, @"\d+").Value;
        keywords.Add(var1);

        var var2 = Regex.Match(i, @"([+-/*])").Value;
        keywords.Add(var2);
    }

    double sum = double.Parse(keywords[0]);

    for (int i = 2; i < keywords.Count - 1; i += 2)
    {
        string keyword = keywords[i - 1];

        if (keyword == "+")
            sum = Addition(sum, double.Parse(keywords[i]));
        else if (keyword == "-")
            sum = Subtraction(sum, double.Parse(keywords[i]));
        else if (keyword == "/")
            sum = Division(sum, double.Parse(keywords[i]));
        else if (keyword == "*")
            sum = Multiplication(sum, double.Parse(keywords[i]));
    }
    return sum;
}

答案 1 :(得分:0)

看起来this sample正是您要构建的东西:

PS> IntCalc.exe 5*5+2
27

只有158行代码,确实是学习parser combinators的好机会。