zoukankan      html  css  js  c++  java
  • [面试题]简单的表达式求值

     1class Program
     2    {
     3        static void Main(string[] args)
     4        {
     5            char[,] cOperTable = 
     6                {
     7                    '>''>''<''<''<''>''>' },
     8                    '>''>''<''<''<''>''>' },
     9                    '>''>''>''>''<''>''>' },
    10                    '>''>''>''>''<''>''>' },
    11                    '<''<''<''<''<''='' ' },
    12                    '>''>''>''>'' ''>''>' },
    13                    '<''<''<''<''<'' ''=' }
    14                }
    ;
    15
    16            string strExp = "1+2-3-(3+2*8)*2#";
    17            string strOpe = "+-*/()#";  // 0 1 2 3 4 5 6 7
    18            Stack vStack = new Stack(); //值栈
    19            Stack oStack = new Stack(); //操作符栈
    20            oStack.Push('#');
    21
    22            for (int i = 0; i < strExp.Length; i++)
    23            {
    24                char c = strExp[i];
    25
    26                while (c != '#' || (char)oStack.Peek() != '#')
    27                {
    28                    if (char.IsNumber(c))
    29                    {
    30                        vStack.Push(c); break;
    31                    }

    32                    else
    33                    {
    34                        bool goNext = true;
    35
    36                        switch(cOperTable[strOpe.IndexOf((char)oStack.Peek()),strOpe.IndexOf(c)])
    37                        {
    38                            case '<':oStack.Push(c);break;
    39                            case '=':oStack.Pop(); break;
    40                            case '>':
    41                                char theta = (char)oStack.Pop();    //操作符
    42                                object b = vStack.Pop();
    43                                object a = vStack.Pop();
    44                                int ib = 0;
    45                                int ia = 0;
    46
    47                                if (b is char) ib = (int)(char)b - 48;
    48                                else if (b is int) ib = (int)b;
    49                                if (a is char) ia = (int)(char)a - 48;
    50                                else if (a is int) ia = (int)a;
    51
    52                                vStack.Push(Operate(ia, theta, ib));
    53                                break;
    54                        }
    //end switch
    55
    56                        if (goNext) break;
    57                    }

    58                }
    //exit while
    59            }
    //exit for
    60
    61            Console.WriteLine("{0}",vStack.Pop());
    62            Console.ReadKey();
    63        }

    64
    65        static int Operate(int a, char theta, int b)
    66        {
    67            switch (theta)
    68            {
    69                case '+'return a + b;
    70                case '-'return a - b;
    71                case '*'return a * b;
    72                case '/'return a / b;
    73                defaultreturn 0;
    74            }

    75        }

    76    }
  • 相关阅读:
    mac给文件夹添加权限命令,mac设置文件夹权限
    idea自动生成Entity类的get方法和set方法
    mac连接linux服务器远程
    phpstorm中设置文件保存后自动上传FTP
    cmd删除文件夹或删除文件
    SpringBoot封装增删改查接口
    修改 Docker 的默认存储路径
    ES6ES11 20152020
    js开发中可用的位运算
    Git 修改最近一次的提交注释 包括已push和未push
  • 原文地址:https://www.cnblogs.com/sskset/p/721299.html
Copyright © 2011-2022 走看看