Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算公式方程_C#_Visual Studio 2010 - Fatal编程技术网

C# 计算公式方程

C# 计算公式方程,c#,visual-studio-2010,C#,Visual Studio 2010,当前代码接受公式并执行计算。我正在找到第一个操作员的位置,并计算出左右两侧的编号- //array of characters char[] arrayOfOperators = {'/', '*', '+', '/'}; string input = "5+4+6+1"; foreach (int i in input) { while (arr

当前代码接受公式并执行计算。我正在找到第一个操作员的位置,并计算出左右两侧的编号-

 //array of characters
            char[] arrayOfOperators = {'/', '*', '+', '/'};
            string input = "5+4+6+1";

               foreach (int i in input)  
               {

                while (arrayOfOperators.Any(input.Contains))
               {


                 int sign = input.IndexOf(  ); //current operator ()
                 Console.WriteLine(sign);

                 string beforeOperator = input.Substring(0, sign);
                 string afterOperator = input.Substring(sign + 1); 

                 // populate these two variables
                 int previousOperatorPosition = (beforeOperator.LastIndexOf('+'));   //   instead of +??      
                 int nextOperatorPosition = (afterOperator.IndexOf('+'));     //   instead of +??  

                 //parse and store in a variable
                 int leftNumber = int.Parse(beforeOperator.Substring(previousOperatorPosition + 1));
                 int rightNumber = 0;

                 if (nextOperatorPosition != -1) 
                 {
                   rightNumber = int.Parse(afterOperator.Substring(0, nextOperatorPosition));    
                 }
                 else
                 {
                    rightNumber = int.Parse(afterOperator);
                 }          
                 // Do calculation with 2 previous variables, and store result in variable
                 int result = (leftNumber + rightNumber);
                 input = (beforeOperator.Substring(0, previousOperatorPosition + 1) + result +  (afterOperator.Substring(1)));
我正在尝试获取当前运算符-int sign=input.IndexOf;我不确定括号里应该有什么

以及这里-

int previousOperatorPosition = (beforeOperator.LastIndexOf('+'));   //   instead of +??      
int nextOperatorPosition = (afterOperator.IndexOf('+'));     //   instead of +??  

非常感谢您的帮助,谢谢

我真的建议您使用类似的工具。它更加健壮,易于使用,而且毕竟,通过解析字符串并尝试对其求值,您不会感到头痛。。。试着阅读更多关于ANTLR、Roslyn或类似的内容……将表达式从中缀转换为后缀,然后从堆栈中弹出操作符要容易得多。看见