中坠表达式转后缀表达式(ASP.NET)

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;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值