Infix function for postfix

2

I'm trying to make a code that makes a function get Ex: 4 + 2 for a postfix Ex: 42+, I can not get the priority of the elements, type, when I make the expression 4 + 2 * 8 the right and print 428 * +, but you're printing 42 * 8 +, because of the mathematical priority that's wrong in my code, follow the code below

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max  1000
#include <stdbool.h>
typedef struct key{
    char tipo;
}TipoItem;
typedef struct pilha{
    TipoItem item[max];
    int topo;
}Pilha;

void criapilha(Pilha *pi){
    pi->topo=0;
}

void empilha(Pilha *pi,TipoItem c){
    if(pi->topo == max){
        printf("Pilha cheia.\n");
        return;
    }
    else{
        pi->item[pi->topo] = c;
        pi->topo++;
    }
}

int vazia(Pilha pi){
    return (pi.topo == 0);
}

void desempilha(Pilha *pi,TipoItem *x){
    char c;
    if(vazia(*pi)){
            //printf("Pilha vazia.\n");
        return;
    }
    else{
        *x = pi->item[pi->topo-1];
        pi->topo--;
    }
}

void printa(Pilha *pi){
    if(pi->topo == 0){
        printf("Pilha vazia.\n");
        return;
    }
    else{
        int i;
        for(i=0;i<pi->topo;i++){
            printf("%c ",pi->item[i]);
        }
    }
}
int prioridade(char a, char b){
    if('a' <= 'c')
        return 1;
    else
        return 0;
}
int main(){
    Pilha pi; criapilha(&pi);
    TipoItem elemento,pop;
    char funcao[max];
    int i,j=0;

                int p = prioridade('a','b');
                printf("%d",p);
                        scanf("%[^\n]",funcao);

                    for(i=0;i<strlen(funcao);i++){
                       elemento.tipo = funcao[i];
        if(elemento.tipo == '-' || elemento.tipo == '+' || elemento.tipo == '/' || elemento.tipo == '^' || elemento.tipo == '*' || elemento.tipo == '(' || elemento.tipo == ')'){
                    if(pi.topo == 0 || elemento.tipo == '('){
                        empilha(&pi,elemento);
                    }
                    else if(pi.topo == 0 || elemento.tipo == ')'){
                        while(pi.topo>0 && pop.tipo!= '('){
                                printa(&pi);
                                desempilha(&pi,&pop);
                              }
                              desempilha(&pi,&pop);
                    }else{
                        while(pi.topo > 0){
                            printa(&pi);
                            desempilha(&pi,&pop);
                        }
                        empilha(&pi,elemento);
                    }
                }else{
                    printf("%c",elemento.tipo);
                }
            }
            //printf("%c",elemento.tipo);
            while(pi.topo > 0){
                printa(&pi);
                desempilha(&pi,&pop);
            }

return 0;
}
    
asked by anonymous 04.06.2017 / 18:10

1 answer

0

Transforms all numbers and symbols into ASCII, gets in order and grows and transforms back.

    
05.06.2017 / 13:00