Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- public class Main {
- static int precedence(char ch) {
- if(ch == '^') return 3;
- if(ch == '/' || ch == '*') return 2;
- if(ch == '+' || ch == '-') return 1;
- return -1;
- }
- static boolean isLower(char ch) {
- return ch >= 'a' && ch <= 'z';
- }
- static boolean isUpper(char ch) {
- return ch >= 'A' && ch <= 'Z';
- }
- static boolean isDigit(char ch) {
- return ch >= '0' && ch <= '9';
- }
- static String infixToPostfix(String str) {
- StringBuilder sb = new StringBuilder();
- Stack<Character>stack = new Stack<>();
- for(int i = 0; i < str.length(); i++) {
- char ch = str.charAt(i);
- if(isLower(ch) || isUpper(ch) || isDigit(ch)) { // character || digit
- sb.append(ch);
- } else if(ch == '(') {
- stack.push(ch);
- } else if(ch == ')') {
- if(stack.empty()) {
- throw new IllegalStateException();
- }
- while(stack.peek() != '(') {
- sb.append(stack.pop());
- }
- stack.pop();
- } else {
- // * / ^ + -
- while(!stack.empty() && precedence(ch) <= precedence(stack.peek())) {
- sb.append(stack.pop());
- }
- stack.push(ch);
- }
- }
- while (!stack.empty()) {
- sb.append(stack.pop());
- }
- return String.valueOf(sb);
- }
- public static void main (String[] args) throws java.lang.Exception {
- Scanner scanner = new Scanner(System.in);
- String str = scanner.next();
- System.out.println(infixToPostfix(str));
- }
- }
Add Comment
Please, Sign In to add comment