只有一個textbox ,接收,和負責得出結果,已賦值,比如輸入了1之后, 按+號,得不出結果啊啊啊怎么辦?
有大神可以寫一下大概的代碼我看看嗎?
uj5u.com熱心網友回復:
https://blog.csdn.net/qq_41939847/article/details/101166013uj5u.com熱心網友回復:
https://blog.csdn.net/vivi_and_qiao/article/details/93863868uj5u.com熱心網友回復:
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());
}
}
}
uj5u.com熱心網友回復:
直接用 datatable.compute算了。public static void Main(string[] args)
{
DataTable dt = new DataTable();
var q = dt.Compute("1+2",null);
Console.WriteLine(q);
Console.ReadLine();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/94782.html
標籤:C#
上一篇:DAO模式
下一篇:C# 關于Thread無法被呼叫
