53 lines
1.3 KiB
C
53 lines
1.3 KiB
C
#include <stdio.h>
|
|
#include <stdbool.h>
|
|
|
|
bool compareTo_priority_op(char op1, char op2) {
|
|
int pr1 = op1 == '*' || op1 == '/' ? 2 : op1 == '+' || op1 == '-' ? 1 : 0;
|
|
int pr2 = op2 == '*' || op2 == '/' ? 2 : op2 == '+' || op2 == '-' ? 1 : 0;
|
|
|
|
return pr1 >= pr2 ? true : false;
|
|
}
|
|
|
|
int main() {
|
|
char input[100];
|
|
scanf("%s",input);
|
|
|
|
char op[100];
|
|
int op_top = -1;
|
|
char result[100];
|
|
int res_top = -1;
|
|
|
|
int idx = 0;
|
|
while(input[idx] != '\0') {
|
|
char c = input[idx];
|
|
|
|
if('A' <= c && c <= 'Z') {
|
|
result[++res_top] = c;
|
|
}
|
|
else {
|
|
if(c=='(') {
|
|
op[++op_top] = c;
|
|
}
|
|
else if(c==')') {
|
|
while(op_top != -1 && op[op_top] != '(') {
|
|
result[++res_top] = op[op_top--];
|
|
}
|
|
if(op_top != -1) op_top--;
|
|
}
|
|
else {
|
|
while(op_top != -1 && compareTo_priority_op(op[op_top], c)) {
|
|
result[++res_top] = op[op_top--];
|
|
}
|
|
op[++op_top] = c;
|
|
}
|
|
}
|
|
idx++;
|
|
}
|
|
|
|
while(op_top != -1) result[++res_top] = op[op_top--];
|
|
|
|
for(int i=0; i<=res_top; i++) printf("%c",result[i]);
|
|
|
|
return 0;
|
|
}
|