C#数学运算表达式解释器

测试文件内容:

a=2+3*2;
b=2*(2+3);

浏览按钮事件处理程序:

        private void button_browse_Click(object sender, EventArgs e)
        {
            OpenFileDialog fbd = new OpenFileDialog();
            fbd.Title = "请选择一个文件:";
            fbd.CheckFileExists = true;
            fbd.CheckPathExists = true;
            fbd.Filter = "*.txt(文本文件)|*.txt|*.*(所有文件)|*.*";
            fbd.FileName = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);
            if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                textBox_saveDir.Text = fbd.FileName;
                try
                {
                    FileStream fs = new FileStream(fbd.FileName, FileMode.Open, FileAccess.Read);
                    StreamReader sr = new StreamReader(fs);
                    while (!sr.EndOfStream)
                    {
                        string line = sr.ReadLine();
                        analyse(line);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("错误:" + ex.Message + "\r\n堆栈:" + ex.StackTrace);
                }
            }
        }

分析一行表达式:

        private void analyse(string line)
        {
            //以分号作为结束符,支持一行内写多个语句
            string[] expA = line.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
            for (int i = 0; i < expA.Length; i++)
            {
                analyseExpA(expA[i]);
            }
        }

计算一条表达式:

        private void analyseExpA(string expA)
        {
            string[] expB = expA.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
            for (int i = 0; i < expB.Length; i++ )
            {
                Regex reg = new Regex("[a-zA-Z]");
                if (!reg.IsMatch(expB[i]))
                {
                    object obj = EvalExpress(expB[i]);
                    if (obj != null)
                    {
                        textBox1.Text += expA + " = " + obj.ToString() + "\r\n";
                    }
                    else
                    {
                        textBox1.Text += expA + ",无法识别的表达式\r\n";
                    }
                }
            }
        }

源码下载:C#数学运算表达式解释器源码

C#数学运算表达式解释器,布布扣,bubuko.com

时间: 2024-08-01 10:44:07

C#数学运算表达式解释器的相关文章

C++实现对数学基本运算表达式的解析

代码地址如下:<br>http://www.demodashi.com/demo/11078.html 前段时间在LeetCode上刷题,遇到了很多涉及对字符串进行解析的题目.可能是出于这个原因,最近迷恋上了字符串的解析问题.数学基本运算表达式的解析就涉及这类问题.所谓数学基本运算表达式的解析就是指给定一个表达式字符串,如1 + 1,3 * 9,对这个字符串进行解析,从而得到这个表达式的运算结果.(数学基本运算表达式也就是只用加减乘除进行计算的数学表达式) 其实站在我的角度来看,我觉得对数学基

第二部 表达式、字面值和数学运算与取余

表达式与操作符概念:操作符.运算对象和表达式. 运算对象:常量.变量.字面值.方法调用.元素访问器和其它表达式. 字面值: @:忽略转义字符,直接显示字符串. 简单数学运算与取余: 加(+).减(-).乘(*).除(/).取余(%)

shell脚本数组的数学运算

今天在用shell脚本写斐波那契数列计算时,一直不停的报错,主要原因是因为shell脚本实在太不智能,在进行数组运算时需要写大量的符号,很容易混淆,所以稍微总结一下数组元素的计算. 首先,有几种情况: 1 在将一个数学运算结果赋值给某普通变量时: (1) let var=算术表达式 (2) var=$[算术表达式] (3) var=$((算术表达式)) (4) var=$(expr arg1 arg2 arg3 ...) 2 在将一个数学运算结果赋值给某数组元素时: (1)let arr[$i]

变量/数学运算/子进程/基本操作之类

蛇棒,我总是会忘记蛇棒的写法,记性是越来越差了 #!/bin/bash #!/usr/bin/env bash shell也是一种弱数据类型的语言,申明变量也就是变量名称=变量值,当然shell中所有的变量默认都是字符串 variable_1=1; 使用的话,变量名之前加$符号就可以直接使用了. echo $variable_1; 当需要对shell中的变量进行数学运算的时候,因为所有的变量都是字符串,所以需要借助命令方式才可以进行数学运算,整型运算使用let $[[]] () var_1=1;

css3 calc():css简单的数学运算-加减乘除

css3 calc():css简单的数学运算–加减乘除 多好的东西啊,不用js,一个css就解决了. .box{ border:1px solid #ddd; width:calc(100% - 100px); background:#9AC8EB; } 3栏等宽布局 .box{ margin-left:20px; width:calc(100%/3 - 20px); } .box:nth-child(3n){ margin-left:0; } 运算规则 calc()使用通用的数学运算规则,但是

shell中的数学运算

shell中要进行数学运算通常有3中方法: expr命令 比如 expr 1 + 6就会返回7,使用expr的缺点就是碰到乘法运算,或者加括号(因为它们在shell中有其他意义),需要使用转义,比如:expr \( 2 + 3\)  \* 5,这样就会使得表达式很难看 $[expression]命令 使用$[expression]命令也可以进行数学计算,并且比expr方便的是*和括号可以不用转义,比如仍然计算(2 + 3) * 5,可以直接写为: result=$[ (2 + 3) * 5 ]

Linux shell 变量 数学 运算

Abstract : 1)  Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算: 2)Linux shell 中使用 expr 与 bc 两个程序实现高级运算: 1, Linux shell 变量的基本运算 数值作为常规变量直接赋值给变量,并且以字符串形式保存. 1.1 let 命令可以用于直接执行基本操作:         当我使用 let 的时候,我们不使用 $ 符号引用变量. no1=7; no2=8; echo "---

shell脚本中的数学运算

shell中的赋值和操作默认都是字符串处理,在此记下shell中进行数学运算的几个特殊方法.以后用到的时候能够来看,呵呵 1.错误方法举例 a) var=1+1 echo $var 输出的结果是1+1,悲剧,呵呵 b) var=1 var=$var+1 echo $var 输出结果是1+1.依旧悲剧,呵呵 2.正确方法 1)使用let var=1 let "var+=1" echo $var 输出结果为2.这次没有悲剧 注意: a)经我測试let差点儿支持全部的运算符,在网上看到一篇文

Linux shell变量数学运算

Linux shell变量数学运算 Abstract : 1)  Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算:2)Linux shell 中使用 expr 与 bc 两个程序实现高级运算: 1, Linux shell 变量的基本运算 数值作为常规变量直接赋值给变量,并且以字符串形式保存. 1.1 let 命令可以用于直接执行基本操作: 当我使用 let 的时候,我们不使用 $ 符号引用变量. no1=7;no2=8; e