Как вставить 2 цифры или более в стек (функция инфикса в постфикс включена)
Мне поручено сделать калькулятор, который вычисляет и преобразует уравнение из инфикса в постфикс при использовании стека (функции push, pop).
Я закончил большую часть кода (он работает, но все еще нуждается в некоторой работе)
но я понятия не имею, как заставить его нажать 2 или более цифр в стеке и оценить их следующим образом 234+15*12
#include <stdio.h> #include <conio.h> #include <math.h> #include <string.h> #include <ctype.h> int InfixToPostfix(); void push(char); char pop(); void calculate(); int priority(char); char stack[20]; int top=-1; char postfix[20]; int main() { while(1) calculate(); getch(); return 0; } int InfixToPostfix() { char infix[20],ch; int k=0,size; printf("----------------------------------------------\nPlease enter the value you wish to calculate\n"); gets(infix); size=strlen(infix); for(int i =0;i<size;i++) { ch=infix[i]; if(isdigit(ch)) postfix[k++]=ch; else if(ch=='(') push(ch); else if (ch==')') { while((stack[top] != '(')) postfix[k++]= pop(); char remove = pop(); } else { while(priority(stack[top]) >= priority(ch)) postfix[k++]=pop(); push(ch); } } while(top != -1) postfix[k++]=pop(); postfix[k] = '\0'; printf("\nGiven Infix Expn: %s Postfix Expn: %s\n", infix, postfix); return postfix[k]; } void push(char x) { stack[++top]=x; } char pop() { return stack[top--]; } void calculate() { int i=0; int op1,op2; char z; InfixToPostfix(); do{ z=postfix[i++]; if(isdigit(z)) push(z - 48); else{ switch(z) { case '+': op1=pop(); op2=pop(); push(op2+op1); break; case '-': op1=pop(); op2=pop(); push(op2-op1); break; case '*': op1=pop(); op2=pop(); push(op2*op1); break; case '/': op1=pop(); op2=pop(); push(op2/op1); break; case '^': op1=pop(); op2=pop(); push((int)pow((double)op2,op1)); break; } } }while(z != '\0'); printf("\n Result after Evaluation: %d\n", stack[top]); } int priority(char x) { if(x=='(') return 0; if(x== '+'|| x=='-') return 1; if(x=='*' || x=='/') return 2; if(x=='^') return 3; return -1; }
Что я уже пробовал:
Смотрю в интернете наверное
PIEBALDconsult
Может быть, прочитать несколько статей, чтобы получить идеи.
Возможно, даже мое: https://www.codeproject.com/Articles/12804/A-Simple-Infix-to-Reverse-Polish-Notation-Transfor