-5
我是C++新手,我想使用堆棧來評估作爲輸入給出的表達式(例如2 + 3 * 5 + 4),僅包含數字+和*。我寫了這段代碼,但它給了我分段錯誤:11.你能幫我解決這個問題,或給我一個關於什麼可能是錯誤的提示嗎?謝謝! (我注意到有這個網站類似的問題,但我不能用它們來解決我的問題)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;
}
您是否使用調試器? – MikeCAT
請發佈[mcve]而不是所有的代碼。鏈接頁面包含如何創建一個幫助。 –
@MikeCAT嗯,不確定。我使用Xcode和終端 – Silviu