У меня была проблема с вычислением, и я не мог понять, где проблема.Он должен вытолкнуть последние 2 числа, добавленные в стек, и вытолкнуть последний оператор с более высоким приоритетом из стека, вычислить их и поместить результат в начало стека.Но когда я выполняю код, он показывает только последний номер, добавленный в стек.
int shunting_yard(char string[]) {
for(int i = 0; i < strlen(string); i++) {
if(string[i] == ' ') {
continue;
}
else if (string[i] == '(' ) {
push_opr(string[i]);
}
else if (isdigit(string[i])) {
int val = 0;
while(i<strlen(string) && isdigit(string[i])) {
//if it is a number of multiple digits
val = (val * 10) + (string[i] - '0');
i++;
}
push_number(val);
}
else if(string[i] == ')' ) {
while(!isEmpty_c(top_c) && last_c() != '(' ) {
int val2 = pop_number();
int val1 = pop_number();
char op = pop_opr();
push_number(calculation(val1, val2, op));
}
pop_opr();
}
else {
while(!isEmpty_c(top_c) && precedence(top_c) >= precedence(string[i])) {
int val2 = pop_number();
int val1 = pop_number();
char op = pop_opr();
push_number(calculation(val1, val2, op));
}
push_opr(string[i]);
}
}
while(!isEmpty_c(top_c)) {
int val2 = pop_number();
int val1 = pop_number();
char op = pop_opr();
push_number(calculation(val1, val2, op));
}
return last();
}