C# 用bodmas在C语言中求解方程#

C# 用bodmas在C语言中求解方程#,c#,C#,我有类似于(7+((8%2)(7%3))。我想用bod-mas来解决这个问题:第一个括号应该在除法、乘法、加法和减法之后求解 我有一个程序,在这个程序中,用户使用基本工资等工资总额创建一个公式。之后,我发现他们的价值,如上面的方程,现在我想解决它 我参观了;他们给出了如下解决方案: string equationString = "(7+((8%2)(7%3)))"; string explicitMultiply = equation String.Replace(")(", ")*(");

我有类似于
(7+((8%2)(7%3))
。我想用bod-mas来解决这个问题:第一个括号应该在除法、乘法、加法和减法之后求解

我有一个程序,在这个程序中,用户使用基本工资等工资总额创建一个公式。之后,我发现他们的价值,如上面的方程,现在我想解决它

我参观了;他们给出了如下解决方案:

string equationString = "(7+((8%2)(7%3)))";
string explicitMultiply = equation String.Replace(")(", ")*(");
但它不起作用。为什么?

C#有它

((8%2)(7%3))//我累了,但它给了我一个错误的方法名 期望

这就是结果

(8 % 2) //return 0
(7 +0 ) // returns 7
最后

(7 + ((8 % 2)*(7 % 3)))  //return 7
更新:

您的代码完全是一个字符串,不会执行该字符串以返回整数

string equationString = "(7+((8%2)(7%3)))";
 string explicitMultiply = equationString.Replace(")(", ")*(");
 Console.WriteLine(explicitMultiply); 
以字符串形式返回(7+((8%2)*(7%3))

如果你想做一个等式转换,比如或


再看一看

你真的在问隐式乘法。您引用的解决方案不适用于“7(3+4)”之类的情况。只有当隐式乘法的两边都有一个括号时,它才会起作用

隐式乘法在实践中很难实现。规则是说,如果由于缺少运算符而导致解析失败,则应添加乘法符号


引用的解决方案在右边,但不完整。

如果要计算该字符串,则可以使用开源框架

您还可以使用在中定义的方法对其进行评估

这就像:

    string equationString = "(7+((8%2)(7%3)))";
    string explicitMultiply = equationString.Replace(")(", ")*(");
    double f = Evaluate(explicitMultiply);

    static double Evaluate(string expression)
    {
        var loDataTable = new DataTable();
        var loDataColumn = new DataColumn("Eval", typeof(double), expression);
        loDataTable.Columns.Add(loDataColumn);
        loDataTable.Rows.Add(0);
        return (double)(loDataTable.Rows[0]["Eval"]);
    }

我希望它能帮助你。:)

看起来您需要一个两步的过程:首先,您需要遍历字符串表达式并将“%”替换为“/100*”,然后您可以使用Alexei的。

您的意思可能是(假设运算顺序是平均数)?OP实际上是在问隐式乘法。这是一个有趣的问题。沉默的否决票和笨拙的编辑是不幸的,但这是典型的。你对被问到的问题做了很多假设,特别是考虑到有一个线程暗示
%
是一个“百分比”操作符。CodeProject项目(很糟糕)链接似乎试图解决隐式乘法问题。没有任何迹象表明OP是在追求同一件事,但我首先要的是8的百分比,它是0.16的倍数,7%3是0.21,答案是7。0336@RajbirSingh
(8%2)
返回0而不是0.16。选中此项@RajbirSingh大多数编程语言中的
%
运算符是模数(除法后的余数),而不是百分比。如果你想把8%2读成2的8%,那么你前面还有很多工作要做。我知道,先生,它返回8%2的模,即0,但我希望它必须使用类似百分比的值。是的,我的问题是,我不想把它读成模,而是先把它读成百分比和括号,我想用逻辑来解决括号(7+((8*2)*(7*3)))先是8*2解,然后是7*3,然后都是倍数,比如16*21=336,然后是7。在这种情况下,您有两个问题:解析代数表达式和实现隐式乘法。您需要从查找最里面的括号开始,然后递归进行。最里面的括号由一对不包含任何其他括号符号的括号符号组成。在你给出的例子中,(8*2)是最里面的括号,这并不难。你只需要找到任何表达式嵌套的最大深度。几乎只有一件事我现在想知道如何将(8%2)替换为(8*2/100)。在此之后,我的问题将得到解决。我使用了字符串生成器或替换方法,但它无法正常工作谢谢你,先生,它可以工作。但是当我操作这个3(4*2)时,它显示语法错误,如果我用“*”(”替换,那么如果我有类似3((482/100)*2)的等式,我如何检查用户输入表达式的格式是否正确创建问题请告诉我,如果有人有解决方案,你可以编辑你的原始问题,并向我们展示你迄今为止的代码吗?很可能,这只是一个调整字符串解析的问题。