我正在编写一个将后缀表达式转换为其前缀形式的程序(因此它应该将此“ABC/-AK/L-*”转换为此“*-A/BC-/AKL”。规则很简单:如果它是一个字母或一个数字(操作数),然后它被压入堆栈,如果它是一个运算符,那么堆栈的最后两个字符(比如说op1(最后一个)和op2(最后一个之后的那个))是被弹出,然后与运算符连接 (temp = operator + op2 + op1),然后将此 temp 压入堆栈。
问题是当使用 pop 时,操作数变成星号,我不知道为什么。也许需要指针?有人可以告诉我我做错了什么吗?非常感谢!
输入:“ABC/-AK/L-*”
预期输出:“*-A/BC-/AKL”
观察到的输出:“[***]”
import (
"fmt"
)
type Stack []string
func (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()
}
尚方宝剑之说
相关分类