using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class 超级计算器 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
TextBox1.Text += "1";
}
protected void Button2_Click(object sender, EventArgs e)
{
TextBox1.Text += "2";
}
protected void Button3_Click(object sender, EventArgs e)
{
TextBox1.Text += "3";
}
protected void Button13_Click(object sender, EventArgs e)
{
TextBox1.Text += "+";
}
protected void Button14_Click(object sender, EventArgs e)
{
TextBox1.Text += "-";
}
protected void Button6_Click(object sender, EventArgs e)
{
TextBox1.Text += "6";
}
protected void Button5_Click(object sender, EventArgs e)
{
TextBox1.Text += "5";
}
protected void Button4_Click(object sender, EventArgs e)
{
TextBox1.Text += "4";
}
protected void Button7_Click(object sender, EventArgs e)
{
TextBox1.Text += "7";
}
protected void Button8_Click(object sender, EventArgs e)
{
TextBox1.Text += "8";
}
protected void Button9_Click(object sender, EventArgs e)
{
TextBox1.Text += "9";
}
protected void Button10_Click(object sender, EventArgs e)
{
TextBox1.Text += "0";
}
protected void Button11_Click(object sender, EventArgs e)
{
TextBox1.Text += ".";
}
protected void Button12_Click(object sender, EventArgs e)
{
TextBox1.Text += "";
}
protected void Button16_Click(object sender, EventArgs e)
{
TextBox1.Text += "/";
}
protected void Button15_Click(object sender, EventArgs e)
{
TextBox1.Text += "*";
}
protected void Button17_Click(object sender, EventArgs e)
{
string express = "";
Stack<string> positFixStack = new Stack<string>();
string cinChar = "";
//中坠表达式转后缀表达式
for (int i = 0; i < TextBox1.Text.Trim().Length; i++)
{
cinChar = TextBox1.Text.Trim().Substring(i, 1);//读取一个字符
#region
switch (cinChar)
{
case "+":
case "-":
while (positFixStack.Count != 0 && positFixStack.Peek() != "(")//左括号在栈里面的优先级是最低的,如果遇到同级的运算符先把里面的出来,自己再进去
{
/* express += positFixStack.Pop();*///出栈并且把弹出的栈顶元素加到express后面
express += positFixStack.Pop();
}
positFixStack.Push(cinChar);
break;
case "/":
case "*":
while (positFixStack.Count != 0 && (positFixStack.Peek() == "*" || positFixStack.Peek() == "/"))
{
express += positFixStack.Pop();
}
positFixStack.Push(cinChar);
break;
case "(":
positFixStack.Push(cinChar);//操作符入栈
break;
case ")":
while (positFixStack.Count != 0 && positFixStack.Peek() != "(")
{
express += positFixStack.Pop();
}
if (positFixStack.Count != 0 && positFixStack.Peek() == "(")//这里之前写成“)”,写反了。没用心
{
positFixStack.Pop();//这里是为了把左括号从栈里丢掉,
}
break;
default:
string a = cinChar;
while (i < TextBox1.Text.Length && (a=="0"||a=="1"||a=="2" || a == "3" || a == "4" || a == "5" || a == "6" || a == "7"|| a == "8" || a == "9"))
{
express += a;
i = i + 1;
if(i>=TextBox1.Text.Length)//如果不+这个扫描到最后一个字符的时候在上面+1了,再执行TextBox1.Text.Substring(i, 1);就会字符串索引越界的
{
break;
}
a = TextBox1.Text.Substring(i, 1);
}
i = i - 1;
express += " ";
continue;
// break;
}
#endregion
}
//字符往express存完之后,可能运算符还没用完,这时候把剩下的栈中的元素全部出栈+到express
while (positFixStack.Count != 0)
{
if (positFixStack.Peek() != "(")
{
express += positFixStack.Pop();
}
else
{
positFixStack.Pop();
}
//中坠表达式转后缀表达式完毕
TextBox1.Text = express;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class 超级计算器 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
TextBox1.Text += "1";
}
protected void Button2_Click(object sender, EventArgs e)
{
TextBox1.Text += "2";
}
protected void Button3_Click(object sender, EventArgs e)
{
TextBox1.Text += "3";
}
protected void Button13_Click(object sender, EventArgs e)
{
TextBox1.Text += "+";
}
protected void Button14_Click(object sender, EventArgs e)
{
TextBox1.Text += "-";
}
protected void Button6_Click(object sender, EventArgs e)
{
TextBox1.Text += "6";
}
protected void Button5_Click(object sender, EventArgs e)
{
TextBox1.Text += "5";
}
protected void Button4_Click(object sender, EventArgs e)
{
TextBox1.Text += "4";
}
protected void Button7_Click(object sender, EventArgs e)
{
TextBox1.Text += "7";
}
protected void Button8_Click(object sender, EventArgs e)
{
TextBox1.Text += "8";
}
protected void Button9_Click(object sender, EventArgs e)
{
TextBox1.Text += "9";
}
protected void Button10_Click(object sender, EventArgs e)
{
TextBox1.Text += "0";
}
protected void Button11_Click(object sender, EventArgs e)
{
TextBox1.Text += ".";
}
protected void Button12_Click(object sender, EventArgs e)
{
TextBox1.Text += "";
}
protected void Button16_Click(object sender, EventArgs e)
{
TextBox1.Text += "/";
}
protected void Button15_Click(object sender, EventArgs e)
{
TextBox1.Text += "*";
}
protected void Button17_Click(object sender, EventArgs e)
{
string express = "";
Stack<string> positFixStack = new Stack<string>();
string cinChar = "";
//中坠表达式转后缀表达式
for (int i = 0; i < TextBox1.Text.Trim().Length; i++)
{
cinChar = TextBox1.Text.Trim().Substring(i, 1);//读取一个字符
#region
switch (cinChar)
{
case "+":
case "-":
while (positFixStack.Count != 0 && positFixStack.Peek() != "(")//左括号在栈里面的优先级是最低的,如果遇到同级的运算符先把里面的出来,自己再进去
{
/* express += positFixStack.Pop();*///出栈并且把弹出的栈顶元素加到express后面
express += positFixStack.Pop();
}
positFixStack.Push(cinChar);
break;
case "/":
case "*":
while (positFixStack.Count != 0 && (positFixStack.Peek() == "*" || positFixStack.Peek() == "/"))
{
express += positFixStack.Pop();
}
positFixStack.Push(cinChar);
break;
case "(":
positFixStack.Push(cinChar);//操作符入栈
break;
case ")":
while (positFixStack.Count != 0 && positFixStack.Peek() != "(")
{
express += positFixStack.Pop();
}
if (positFixStack.Count != 0 && positFixStack.Peek() == "(")//这里之前写成“)”,写反了。没用心
{
positFixStack.Pop();//这里是为了把左括号从栈里丢掉,
}
break;
default:
string a = cinChar;
while (i < TextBox1.Text.Length && (a=="0"||a=="1"||a=="2" || a == "3" || a == "4" || a == "5" || a == "6" || a == "7"|| a == "8" || a == "9"))
{
express += a;
i = i + 1;
if(i>=TextBox1.Text.Length)//如果不+这个扫描到最后一个字符的时候在上面+1了,再执行TextBox1.Text.Substring(i, 1);就会字符串索引越界的
{
break;
}
a = TextBox1.Text.Substring(i, 1);
}
i = i - 1;
express += " ";
continue;
// break;
}
#endregion
}
//字符往express存完之后,可能运算符还没用完,这时候把剩下的栈中的元素全部出栈+到express
while (positFixStack.Count != 0)
{
if (positFixStack.Peek() != "(")
{
express += positFixStack.Pop();
}
else
{
positFixStack.Pop();
}
//中坠表达式转后缀表达式完毕
TextBox1.Text = express;
}
}
}