Pessoal estou fazendo faculdade de ciências da computação e estou com problema em pilha em fazer um algoritmo que transforme uma equação em infixa para posfixa, tambem conhecido como Notação Polonesa, fiz o código mais não estou conseguindo arrumar o erro, alguem poderia me ajudar
Código:
#include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "static_stack.h" #include "TokenReader_arquivo.c" void concatenachar(char* string2, char c){ int i = strlen(string2); string2[i]=c; string2[i+1]='\0'; } char* converte(char *str){ char *str2; char operador = ' '; char carac; char* resultado = (char*)calloc((strlen(str)*2),sizeof(char)); resultado[0]='\0'; Stack* p = createStack(); TokenReader* token = newTokenReader(str); while(hasMoreTokens(token)){ str2=nextToken(token); if(str2[0] == '('){ push(p,str2[0]); } else if(str2[0]=='+' || str2[0] == '-'){ push(p,str2[0]); } else if(str2[0] == '*' || str2[0] == '/'){ top(p,&operador); while(operador == '+' || operador=='-'){ pop(p,&carac); concatenachar(resultado,' '); concatenachar(resultado,carac); if(!top(p,&operador)) break; } push(p,str2[0]); } else if(str2[0] == ')' ){ pop(p,&operador); while(operador!= '('){ concatenachar(resultado,' '); concatenachar(resultado,operador); pop(p,&operador); } } else { printf("felipe viado 1"); concatenachar(resultado,' '); strcat(resultado, str); } } while(!isEmptyStack(p)){ concatenachar(resultado,' '); pop(p,&operador); concatenachar(resultado,operador); } free(str2); return resultado; } float calcular(char *str){ char* str2; float v1,v2, resultado; Stack* p = createStack(); TokenReader* token = newTokenReader(str); while(hasMoreTokens(token)){ str2=nextToken(token); switch(str2[0]){ case '+': resultado = v2+v1; break; case '-': resultado = v2-v1; break; case '*': resultado = v2*v1; break; case '/': resultado =v2/v1; break; default: printf(" Erro: Operador não Identificado."); } push(p,resultado); free(str2); } pop(p,&resultado); return resultado; } int main(){ int op=0; char str[50]; char* str2; float resultado; while (op!= 3 ){ printf("\n\n>-----------------------------------------------------<"); printf("\n| Calculadora |"); printf("\n>-----------------------------------------------------<"); printf("\n"); printf("\n 1 - Converter Infixa -> PosFixa"); printf("\n 2 - Efetuar Operacao PosFixa"); printf("\n 3 - Sair"); printf("\n Opcao:"); scanf("%d",&op); fflush(stdin); switch(op){ case 1: printf("\n Digite um Expressao para conversao:"); fflush(stdin); scanf("%s", str); str2=converte(str); printf("\n PosFixa: %s", str2); break; case 2: printf("\n Digite um Expressao PosFixa:"); fflush(stdin); scanf("%s", str); resultado=calcular(str); printf("\n Resultado: %.3f",resultado); break; case 3: exit(1); break; default: printf("\n Erro: Opção Invalida"); } } return 0 ; }