Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- import java.util.Stack;
- public class Source {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- String infix = sc.nextLine();
- System.out.printf("infix: %s%n", infix);
- System.out.printf("postfix: %s%n", infixToPostfix(infix));
- }
- static String infixToPostfix(String infix) {
- final String ops = "=|&?<>-+/*^!~";
- StringBuilder sb = new StringBuilder();
- Stack<Integer> s = new Stack<>();
- for (int i = 0; i < infix.length(); i++) {
- String token = "" + infix.charAt(i);
- if (token.isEmpty())
- continue;
- char c = token.charAt(0);
- int idx = ops.indexOf(c);
- if (idx != -1) {
- if (s.isEmpty())
- s.push(idx);
- else {
- while (!s.isEmpty()) {
- int prec2 = s.peek() ;
- int prec1 = idx;
- if (prec2 > prec1 || (prec2 == prec1 && c != '^' && c != '!' && c != '~'))
- sb.append(ops.charAt(s.pop())).append(' ');
- else break;
- }
- s.push(idx);
- }
- }
- else if (c == '(') {
- s.push(-2);
- }
- else if (c == ')') {
- while (s.peek() != -2)
- sb.append(ops.charAt(s.pop())).append(' ');
- s.pop();
- }
- else if((token.charAt(0) >= 'a' && token.charAt(0) <= 'z') || (token.charAt(0)) >= 'A' && token.charAt(0) <= 'Z'){
- sb.append(token).append(' ');
- }
- else {
- // sb.append(' ');
- }
- }
- while (!s.isEmpty())
- sb.append(ops.charAt(s.pop())).append(' ');
- return sb.toString();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement