2010-08-17 21 views
1

Je suis en train d'écrire un programme d'évaluation de Postfix expression code:évaluation Postfix expression

#include <iostream> 
#include <cstring> 
#include <stack> 
#include <ostream> 
using namespace std; 
int main(int argc,char *argv[]){ 
    char *a=argv[1]; 
    int n=strlen(a); 
    stack<int>s; 
    for (int i=0;i<n;i++) 
    { 
     if (a[i]=='+') 
      s.push(s.pop()+s.pop()); 
     if (a[i]=='*') 
      s.push(s.pop() * s.pop()); 
     if ((a[i]>='0') && (a[i]<='9')) 
      s.push(0); 
     while ((a[i]>='0') && (a[i]<='9')) 
      s.push(10*s.pop()+(a[i++]-'0')); 
    } 
    cout<<s.pop()<<endl; 
    return 0; 
} 

Mais erreurs dit que

1>c:\users\david\documents\visual studio 2010\projects\compilers\compilers.cpp(16): error C2296: '*' : illegal, left operand has type 'void' 
1>c:\users\david\documents\visual studio 2010\projects\compilers\compilers.cpp(16): error C2297: '*' : illegal, right operand has type 'void' 
1>c:\users\david\documents\visual studio 2010\projects\compilers\compilers.cpp(21): error C2297: '*' : illegal, right operand has type 'void' 
1>c:\users\david\documents\visual studio 2010\projects\compilers\compilers.cpp(25): error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'void' (or there is no acceptable conversion) 

Je pensais que j'ai une pile de type string ou tapez char, mais aucun ne fonctionne. Comment puis-je résoudre ce problème?

+0

Je recommande fortement 'char const * const a = argv [1]' – Chubsdad

Répondre

1

La fonction pop justs pops mais ne retourne rien.

Vous devez utiliser le top pour obtenir la valeur supérieure, puis appelez pop

Alors

s.push(s.pop() * s.pop()); 

devrait être remplacé:

int temp1 = s.top(); 
s.pop(); 
int temp2 = s.top(); 
s.pop(); 
s.push(temp1 * temp2); 
0

Ce link peut vous aider à résoudre votre problème.