简单的分析+-*/表达式

package main

import (
    "fmt"
    "container/list"
    "strings"
    "strconv"
    //"reflect"
)

func main(){
    opList := list.New()
    valList := list.New()


    fmt.Println("")
    var expression string = "( 4 + 1 ) + ( 6 ) + ( 20 )"

    //isWhile := true
    strList := strings.Split(expression," ")

    for s:= range strList{
        val := strList[s]
        //fmt.Println("index: ", s)

        if val == "("{

        }else if val == "+" || val == "-" || val == "*" || val == "/" || val == "sqrt" || val == "" {
            opList.PushFront(val)
        }else if val == ")"{
            op := opList.Front()
            val := valList.Front()
            valList.Remove(val)

            //fmt.Println("len:",valList.Len())
            //fmt.Println("op: " ,op)
            //fmt.Println("val: ",val)
            //fmt.Println("type:", reflect.TypeOf(val.Value))

            value , ok := val.Value.(int64)

            if ok {

                newVal := valList.Front()
                valList.Remove(newVal)

                if f1,ok1 := newVal.Value.(int64);ok1{
                    //fmt.Println("ok1",op.Value)
                    if op.Value == "+"{
                        val.Value = f1 + value
                    }else if op.Value == "-"{
                        val.Value = f1 - value
                    }else if op.Value == "*"{
                        val.Value = f1 * value
                    }else if op.Value == "/"{
                        val.Value = f1 / value
                    }else if op.Value == "sqrt"{
                        //val.Value = int(valList.Front()) + int(val.Value)
                    }
                }
            }

            valList.PushFront(val.Value)

        }else {
            u,err := strconv.ParseInt(val,10,16)
            if err != nil{
                fmt.Println(err.Error())
            }
            //fmt.Println("值",u)
            valList.PushFront(u)
        }
    }

    for e:= valList.Front(); e!= nil ; e= e.Next()  {
        fmt.Println("结果:" ,e.Value)
    }


}

46_{KDA4}2H[)T5T]OVK[6N[6]

转载于:https://www.cnblogs.com/plateFace/p/6306328.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值