为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信