-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathimplementation.go
More file actions
33 lines (28 loc) · 890 Bytes
/
implementation.go
File metadata and controls
33 lines (28 loc) · 890 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package lab2
import (
"fmt"
"strings"
)
func ConvertPostfixToPrefix(inputString string) (string, error) {
if (len(inputString) == 2 || len(inputString) == 1 || len(inputString) == 0) {
return "", fmt.Errorf("Incorrect input postfix expression!!!")
}
var inputStringArray = strings.Split(inputString, " ")
var operators = "+-*/"
var stack []string
for i := 0; i < len(inputStringArray); i++ {
var currentElement = inputStringArray[i]
if !strings.Contains(operators, currentElement) {
stack = append(stack, currentElement)
} else {
var firstOperand = stack[len(stack)-1]
stack = stack[:len(stack) - 1]
var secondOperand = stack[len(stack)-1]
stack = stack[:len(stack) - 1]
var prefixForm = currentElement + " " + secondOperand + " " + firstOperand
stack = append(stack, prefixForm)
}
}
var result = strings.Join(stack, " ")
return result, nil
}