zoukankan      html  css  js  c++  java
  • 四则混合运算类

    我是用中文作的变量名,看起来有点别扭。不习惯,如果你愿意的话可以把他改成英文的!

    有两个了类,一个做语法检查,一个做运算!


    今天想到了一个更好的方法,这样可以提高运算精度。
    等两天贴上来

    献丑了!
    using System;

    namespace 四则混合运算
    {
     
    /// <summary>
     
    /// 分析表达式语法,判断是否正确
     
    /// </summary>

     public class 语法
     
    {
      
    public 语法()
      
    {
       
    //
       
    // TODO: 在此处添加构造函数逻辑
       
    //
      }

      
    /// <summary>
      
    /// 对公式进行语法检测
      
    /// </summary>
      
    /// <param name="公式">需要检测的公式</param>
      
    /// <returns></returns>

      public static  bool 语法检测(string 公式)
      
    {   
       公式
    =公式.TrimStart(' ');
       
    int 正括号=0;
       
    int 反括号=0;
       
    int 正括号位置=0;
       
    for(int i=0;i<公式.Length;i++)
       
    {
        
    //清楚空格
        switch(公式[i])
        
    {
         
    case '(':
         
    {
          正括号
    ++;
          正括号位置
    =i;
          
    break;
         }

         
    case ')':
         
    {
          反括号
    ++;
          
    if((i-1)==正括号位置)
          
    {
           
    return false;
          }

          
    break;
         }

         
    case '+':case '-':case '*'case '/':
         
    {
          
    if(公式[i-1]=='('  || 公式[i-1]=='+' || 公式[i-1]=='-' || 公式[i-1]=='*' || 公式[i-1]=='/')
          
    {
           
    return false;
          }


          
    if( 公式[i+1]==')' || 公式[i+1]=='+' || 公式[i+1]=='-' || 公式[i+1]=='*' || 公式[i+1]=='/')
          
    {
           
    return false;
          }

          
    break;
         }

         
        }

       }

       
    return 正括号==反括号?true:false;
        
      }

      
     }

    }



    ——————————————————————————————————————————————

    using System;
     
    namespace 四则混合运算
    {
     
    /// <summary>
     
    /// 运算公式 的摘要说明。
     
    /// </summary>

     public class 运算公式
     
    {
      
    public 运算公式()
      
    {
       
    //
       
    // TODO: 在此处添加构造函数逻辑
       
    //
      }

      
    public static  string 运算(string 公式)
      
    {
       公式.TrimStart(
    ' ');
       
    int 正括号=0;
       
    int 反括号=0;
       
    while(公式.IndexOf('(')>-1)
       
    {
        
    for(int i=0;i<公式.Length;i++)
        
    {
         
    if(公式[i]=='(')
         
    {
          正括号
    =i;
         }

         
    if(公式[i]==')')
         
    {
          反括号
    =i;
          
    string 直接公式=公式.Substring(正括号,反括号-正括号+1);
          
    string 返回值=优先级运算(直接公式.Substring(1,直接公式.Length-2));
          公式
    =公式.Replace(直接公式,返回值);
         }

        }

       }

       
       
    return 优先级运算(公式).ToString();
               
      }


      
    private static string 优先级运算(string 公式)
      
    {
       
        
    int 开始=0;
        
    int 结束=0;
        
    //处理乘除运算
        for(int i=0;i<公式.Length;i++)
        
    {
         
    switch(公式[i])
         
    {
          
    case '+':case'-':
           开始
    =i+1;
           
    break;
          
    case '*'case'/':
           
    string 公式段=公式.Remove(开始,i+1);
              
    int d;
           
    for(d=0;d<公式段.Length;d++)
           
    {
            
    if(公式段[d]=='*' || 公式段[d]=='/' || 公式段[d]=='+' || 公式段[d]=='-')
            
    {
             结束
    =d;
             
    break;
            }

           }

           公式段
    =公式.Substring(开始,i-开始+d+1);
           公式
    =公式.Replace(公式.Substring(开始,公式段.Length),直接运算(公式段).ToString());
           
    break;
         }

        }

       开始
    =0;
       结束
    =0;
       
    //处理乘除运算
       for(int i=0;i<公式.Length;i++)
       
    {
        
    switch(公式[i])
        
    {
         
         
    case '+'case'-':
          
    string 公式段=公式.Remove(开始,i+1);
          
    int d;
          
    for(d=0;d<公式段.Length;d++)
          
    {
           
    if(公式段[d]=='+' || 公式段[d]=='-')
           
    {
            结束
    =d;
               
    break;
           }

          }

          公式段
    =公式.Substring(开始,i+d+1);
          公式
    =公式.Replace(公式.Substring(开始,公式段.Length),直接运算(公式段).ToString());
          
    break;
        }

       }

        
       
    return 公式;
      }

      
    /// <summary>
      
    /// 直接运算公式
      
    /// </summary>
      
    /// <param name="公式"></param>
      
    /// <returns></returns>

      private static Double 直接运算(string 公式)
      
    {
       Double a;
       Double b;
       
    int 长度=1;
       
    for(int i=0;i<公式.Length;i++)
       
    {
        
        
        
    switch(公式[i])
        
    {
         
    case '*':
          a
    =System.Convert.ToDouble(公式.Substring(0,i));
          b
    =System.Convert.ToDouble(公式.Substring(i+1,公式.Length-长度));
          
    return a*b;
         
    case '/':
          a
    =System.Convert.ToDouble(公式.Substring(0,i));
          b
    =System.Convert.ToDouble(公式.Substring(i+1,公式.Length-长度));
          
    return a/b;
         
    case '+':
          a
    =System.Convert.ToDouble(公式.Substring(0,i));
          b
    =System.Convert.ToDouble(公式.Substring(i+1,公式.Length-长度));
          
    return a+b;
         
    case '-':
          a
    =System.Convert.ToDouble(公式.Substring(0,i));
          b
    =System.Convert.ToDouble(公式.Substring(i+1,公式.Length-长度));
          
    return a-b;
        }

        长度
    ++;
       }

       
       
    return 0;
        
      }

     }

    }


  • 相关阅读:
    一篇文章高效定位iframe
    URL与视图函数的映射
    include标签—引用文件路径
    UnitTest单元测试框架解析【实用篇】
    【案例演练】测试器与模板继承
    2招带你快速获取响应头与发送头
    dede网站如何更新地图sitemap.html
    申请微信小程序流程步骤
    phpstudy本地配置--dede织梦网
    stylus样式开发的使用----vue
  • 原文地址:https://www.cnblogs.com/leiyu1980/p/158959.html
Copyright © 2011-2022 走看看