Advertisement
josiftepe

Untitled

Apr 9th, 2021
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.94 KB | None | 0 0
  1. import java.util.Scanner;
  2. import java.util.Stack;
  3.  
  4. public class Source {
  5.  
  6.     public static void main(String[] args) {
  7.         Scanner sc = new Scanner(System.in);
  8.         String infix = sc.nextLine();
  9.         System.out.printf("infix:   %s%n", infix);
  10.         System.out.printf("postfix: %s%n", infixToPostfix(infix));
  11.     }
  12.  
  13.     static String infixToPostfix(String infix) {
  14.  
  15.         final String ops = "=|&?<>-+/*^!~";
  16.  
  17.         StringBuilder sb = new StringBuilder();
  18.         Stack<Integer> s = new Stack<>();
  19.  
  20.         for (int i = 0; i < infix.length(); i++) {
  21.             String token = "" + infix.charAt(i);
  22.             if (token.isEmpty())
  23.                 continue;
  24.             char c = token.charAt(0);
  25.             int idx = ops.indexOf(c);
  26.  
  27.             if (idx != -1) {
  28.                 if (s.isEmpty())
  29.                     s.push(idx);
  30.  
  31.                 else {
  32.                     while (!s.isEmpty()) {
  33.                         int prec2 = s.peek() ;
  34.                         int prec1 = idx;
  35.                         if (prec2 > prec1 || (prec2 == prec1 && c != '^' && c != '!' && c != '~'))
  36.                             sb.append(ops.charAt(s.pop())).append(' ');
  37.                         else break;
  38.                     }
  39.                     s.push(idx);
  40.                 }
  41.             }
  42.             else if (c == '(') {
  43.                 s.push(-2);
  44.             }
  45.             else if (c == ')') {
  46.  
  47.                 while (s.peek() != -2)
  48.                     sb.append(ops.charAt(s.pop())).append(' ');
  49.                 s.pop();
  50.             }
  51.             else if((token.charAt(0) >= 'a' && token.charAt(0) <= 'z') || (token.charAt(0)) >= 'A' && token.charAt(0) <= 'Z'){
  52.                 sb.append(token).append(' ');
  53.             }
  54.             else {
  55. //                sb.append(' ');
  56.             }
  57.         }
  58.         while (!s.isEmpty())
  59.             sb.append(ops.charAt(s.pop())).append(' ');
  60.         return sb.toString();
  61.     }
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement