c#窗体 做个计算器 只有一个textbox ,接收,和负责得出结果,已赋值,比如输入了1之后, 按+号,得不出结果啊啊啊怎么办?有大神可以写一下大概的代码我看看吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 https://blog.csdn.net/qq_41939847/article/details/101166013 https://blog.csdn.net/vivi_and_qiao/article/details/93863868 using System.Collections.Generic;using System.Windows.Forms;namespace Test5{ public partial class Form1 : Form { public class Calculator { public Calculator() { _OptStack = new Stack<char>(); _SuffixStack = new Stack<float>(); } private Stack<char> _OptStack; private Stack<float> _SuffixStack; public float Calculate(string expression) { string lastNum = string.Empty; for (int i = 0; i < expression.Length; i++) { if (char.IsNumber(expression[i]) || expression[i].Equals('.')) { lastNum += expression[i]; } else { if (lastNum != string.Empty) { Merger(float.Parse(lastNum)); lastNum = string.Empty; } AddOpt(expression[i]); } } if (lastNum != string.Empty) { Merger(float.Parse(lastNum)); } while (_OptStack.Count > 0) { Merger(_OptStack.Pop()); } return _SuffixStack.Pop(); } private void AddOpt(char opt) { if (_OptStack.Count == 0) { _OptStack.Push(opt); return; } if (opt.Equals(')')) { while (!_OptStack.Peek().Equals('(')) { Merger(_OptStack.Pop()); } _OptStack.Pop(); return; } char tempOpt = _OptStack.Peek(); if ((opt.Equals('-') || opt.Equals('+')) && (tempOpt.Equals('*') || tempOpt.Equals('/'))) { while (_OptStack.Count > 0) { Merger(_OptStack.Pop()); } } _OptStack.Push(opt); } private void Merger(float exp) { _SuffixStack.Push(exp); } private void Merger(char exp) { float num1 = _SuffixStack.Pop(); float num2 = _SuffixStack.Pop(); float result = 0; switch (exp) { case '+': result = num2 + num1; break; case '-': result = num2 - num1; break; case '*': result = num2 * num1; break; case '/': result = num2 / num1; break; } _SuffixStack.Push(result); } } public Form1() { InitializeComponent(); Calculator calculator = new Calculator(); MessageBox.Show("结果:"+ calculator.Calculate("(1+2)/3+6/2+3*8").ToString()); } }} 直接用 datatable.compute算了。public static void Main(string[] args) { DataTable dt = new DataTable(); var q = dt.Compute("1+2",null); Console.WriteLine(q); Console.ReadLine(); } 关于gridview 分页存储过程调用的问题 获取电脑中所有软件的最后运行时间~~~~ C#Form设计的问题(最大化) c# teechart编程问题 C#winform怎样连接到远程服务器? 關系自定義屬性的問題 数据库 正则表达式 前面n个“X”或“x”,后面n个“X”或“x”。求中间的字符串。 连接数据库小问题 请问在数据库编程中,怎么在添加或修改后,如用户想进行取消操作。代码将怎样写。 C# winform 触发点动按钮,如何解决先进行滑动然后再按住才能触发? c# 多次缩放图片出现错误
using System.Collections.Generic;
using System.Windows.Forms;namespace Test5
{
public partial class Form1 : Form
{
public class Calculator
{
public Calculator()
{
_OptStack = new Stack<char>();
_SuffixStack = new Stack<float>();
} private Stack<char> _OptStack;
private Stack<float> _SuffixStack; public float Calculate(string expression)
{
string lastNum = string.Empty;
for (int i = 0; i < expression.Length; i++)
{
if (char.IsNumber(expression[i]) || expression[i].Equals('.'))
{
lastNum += expression[i];
}
else
{
if (lastNum != string.Empty)
{
Merger(float.Parse(lastNum));
lastNum = string.Empty;
}
AddOpt(expression[i]);
}
}
if (lastNum != string.Empty)
{
Merger(float.Parse(lastNum));
}
while (_OptStack.Count > 0)
{
Merger(_OptStack.Pop());
} return _SuffixStack.Pop();
} private void AddOpt(char opt)
{
if (_OptStack.Count == 0)
{
_OptStack.Push(opt);
return;
}
if (opt.Equals(')'))
{
while (!_OptStack.Peek().Equals('('))
{
Merger(_OptStack.Pop());
}
_OptStack.Pop();
return;
}
char tempOpt = _OptStack.Peek();
if ((opt.Equals('-') || opt.Equals('+')) &&
(tempOpt.Equals('*') || tempOpt.Equals('/')))
{
while (_OptStack.Count > 0)
{
Merger(_OptStack.Pop());
}
} _OptStack.Push(opt);
} private void Merger(float exp)
{
_SuffixStack.Push(exp);
} private void Merger(char exp)
{
float num1 = _SuffixStack.Pop();
float num2 = _SuffixStack.Pop();
float result = 0;
switch (exp)
{
case '+':
result = num2 + num1;
break;
case '-':
result = num2 - num1;
break;
case '*':
result = num2 * num1;
break;
case '/':
result = num2 / num1;
break;
}
_SuffixStack.Push(result);
}
} public Form1()
{
InitializeComponent(); Calculator calculator = new Calculator(); MessageBox.Show("结果:"+ calculator.Calculate("(1+2)/3+6/2+3*8").ToString());
}
}
}
public static void Main(string[] args)
{
DataTable dt = new DataTable();
var q = dt.Compute("1+2",null);
Console.WriteLine(q);
Console.ReadLine();
}