Je suis novice en C++ et je veux utiliser une pile pour évaluer une expression donnée en entrée (2 + 3 * 5 + 4 par exemple), contenant uniquement des nombres, + et *. J'ai écrit ce code mais cela me donne une erreur de segmentation: 11. Pourriez-vous s'il vous plaît m'aider à résoudre ce problème ou me donner un indice sur ce qui pourrait être faux? Je vous remercie! (Je remarqué qu'il y avait des questions similaires sur ce site, mais je ne pouvais pas les utiliser pour résoudre mon problème)Pile de notation Postfix C++
#include <iostream>
#include <stack>
using namespace std;
bool highPrecedence(char a, char b){
if((a=='+')&&(b=='*'))
return true;
return false;
}
int main()
{
char c = 'a';
double x;
stack<char> stack;
double v[10];
int i=0;
double res;
while(true)
{
c = cin.get();
if(c=='\n'){
while(stack.size()!=0){
if (stack.top()=='*'){
double res = v[i]*v[i-1];
i--;
v[i]=res;
stack.pop();
}
if (stack.top()=='+'){
res = v[i]+v[i-1];
i--;
v[i]=res;
stack.pop();
}
}
break;
}
if ('0'<=c && c<='9')
{
cin.putback(c);
cin>>x;
cout<<"Operand "<<x<<endl;
i=i+1;
v[i]=x;
}
else
{
if(c!=' ') cout<< "Operator " <<c<<endl;
if (stack.size()==0)
stack.push(c);
else{
while((!highPrecedence(stack.top(),c)) && (stack.size()!=0)){
if (stack.top()=='*'){
double res = v[i]*v[i-1];
i--;
v[i]=res;
stack.pop();
}
if (stack.top()=='+'){
res = v[i]+v[i-1];
i--;
v[i]=res;
stack.pop();
}
}
stack.push(c);
}
}
}
cout<<v[0]<<endl;
}
Avez-vous utilisé un débogueur? – MikeCAT
Veuillez poster un [mcve] au lieu de tout votre code. La page liée contient de l'aide sur la façon de créer un. –
@MikeCAT ummm pas sûr. J'utilise Xcode et le terminal – Silviu