unknown_0711

Untitled

Oct 30th, 2022
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class Main {
  4.  
  5. static int precedence(char ch) {
  6. if(ch == '^') return 3;
  7. if(ch == '/' || ch == '*') return 2;
  8. if(ch == '+' || ch == '-') return 1;
  9. return -1;
  10. }
  11.  
  12. static boolean isLower(char ch) {
  13. return ch >= 'a' && ch <= 'z';
  14. }
  15.  
  16. static boolean isUpper(char ch) {
  17. return ch >= 'A' && ch <= 'Z';
  18. }
  19.  
  20. static boolean isDigit(char ch) {
  21. return ch >= '0' && ch <= '9';
  22. }
  23.  
  24. static String infixToPostfix(String str) {
  25. StringBuilder sb = new StringBuilder();
  26. Stack<Character>stack = new Stack<>();
  27. for(int i = 0; i < str.length(); i++) {
  28. char ch = str.charAt(i);
  29. if(isLower(ch) || isUpper(ch) || isDigit(ch)) { // character || digit
  30. sb.append(ch);
  31. } else if(ch == '(') {
  32. stack.push(ch);
  33. } else if(ch == ')') {
  34. if(stack.empty()) {
  35. throw new IllegalStateException();
  36. }
  37. while(stack.peek() != '(') {
  38. sb.append(stack.pop());
  39. }
  40. stack.pop();
  41. } else {
  42. // * / ^ + -
  43. while(!stack.empty() && precedence(ch) <= precedence(stack.peek())) {
  44. sb.append(stack.pop());
  45. }
  46. stack.push(ch);
  47. }
  48. }
  49.  
  50. while (!stack.empty()) {
  51. sb.append(stack.pop());
  52. }
  53.  
  54. return String.valueOf(sb);
  55. }
  56.  
  57. public static void main (String[] args) throws java.lang.Exception {
  58. Scanner scanner = new Scanner(System.in);
  59. String str = scanner.next();
  60. System.out.println(infixToPostfix(str));
  61. }
  62. }
Add Comment
Please, Sign In to add comment