亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go 程序打印星號而不是實際字符

Go 程序打印星號而不是實際字符

Go
達令說 2022-12-13 16:01:15
我正在編寫一個將后綴表達式轉換為其前綴形式的程序(因此它應該將此“ABC/-AK/L-*”轉換為此“*-A/BC-/AKL”。規則很簡單:如果它是一個字母或一個數字(操作數),然后它被壓入堆棧,如果它是一個運算符,那么堆棧的最后兩個字符(比如說op1(最后一個)和op2(最后一個之后的那個))是被彈出,然后與運算符連接 (temp = operator + op2 + op1),然后將此 temp 壓入堆棧。問題是當使用 pop 時,操作數變成星號,我不知道為什么。也許需要指針?有人可以告訴我我做錯了什么嗎?非常感謝!輸入:“ABC/-AK/L-*”預期輸出:“*-A/BC-/AKL”觀察到的輸出:“[***]”import (    "fmt")type Stack []stringfunc (s *Stack) isEmpty() bool {    return len(*s) == 0}func (s *Stack) push(value string) {    *s = append(*s, value)}func (s *Stack) pop() (string, bool) {    if s.isEmpty() {        return "", false    } else {        elementIndex := len(*s) - 1        element := (*s)[elementIndex]        *s = (*s)[:elementIndex]        return element, true    }}func isOperator(character string) bool {    switch character {    case "+", "-", "*", "/":        return true    default:        return false    }}func input() {    var stack Stack    fmt.Print("Please input the equation without spaces: \n")    input := "ABC/-AK/L-*"    for _, character := range input {        valueCheck := isOperator(string(character))        if valueCheck == true {            operand1 := input[len(input)-1]            stack.pop()            operand2 := input[len(input)-1]            stack.pop()            var temp string            temp = string(character) + string(operand2) + string(operand1)            stack.push(temp)        } else {            stack.push(string(character))        }    }    fmt.Print(stack)}func main() {    input()}
查看完整描述

1 回答

?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

func input() {

    var stack Stack

    fmt.Print("Please input the equation without spaces: \n")

    input := "ABC/-AK/L-*"



    for _, character := range input {

        valueCheck := isOperator(string(character))

        if valueCheck {

            operand1 := stack[len(stack)-1]

            stack.pop()

            operand2 := stack[len(stack)-1]

            stack.pop()



            temp := string(character) + string(operand2) + string(operand1)

            stack.push(temp)


        } else {

            stack.push(string(character))

        }

    }

這將為您提供您所期望的。


一些旁注:


if valueCheck == true太多了,因為valueCheck是布爾類型

var temp string

temp = string(character) + string(operand2) + string(operand1)

也有點冗長


temp := string(character) + string(operand2) + string(operand1)

足夠的。


并且最好熟悉一下dlv debugger,這樣下次你迷茫的時候會節省一些時間和精力。


查看完整回答
反對 回復 2022-12-13
  • 1 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號