设为首页 加入收藏

TOP

C#数学运算表达式解释器
2014-11-23 22:10:05 来源: 作者: 【 】 浏览:25
Tags:数学 运算 表达式 解释

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


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 = eva lExpress(expB[i]);
if (obj != null)
{
textBox1.Text += expA + " = " + obj.ToString() + "\r\n";
}
else
{
textBox1.Text += expA + ",无法识别的表达式\r\n";
}
}
}
}


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


------------------------------------------分割线------------------------------------------


具体下载目录在 /2014年资料/7月/17日/C#数学运算表达式解释器


------------------------------------------分割线------------------------------------------


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇利用HTML5定位功能实现在百度地图.. 下一篇C#多线程编程实例 线程与窗体交互..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: