我在尋找的東西,解釋我如何可以計算一個Polish Expression
,例如:計算波蘭表達式
,如果我有這個((1+2)*4)+3
,以正常的方式是1+2*4+3 = 15
,但我需要 寫這樣:12+4*3+
使用stack
獲得最高的價值,並在堆棧中再次把,看我的代碼:https://ideone.com/0bdkkM
我已經看到一個職位,但我不明白我怎麼可以讓所需要的操作:StackOverflow
我在尋找的東西,解釋我如何可以計算一個Polish Expression
,例如:計算波蘭表達式
,如果我有這個((1+2)*4)+3
,以正常的方式是1+2*4+3 = 15
,但我需要 寫這樣:12+4*3+
使用stack
獲得最高的價值,並在堆棧中再次把,看我的代碼:https://ideone.com/0bdkkM
我已經看到一個職位,但我不明白我怎麼可以讓所需要的操作:StackOverflow
這是一個簡單的RPN評估器,沒有任何錯誤處理。你只需要一個堆棧來存儲操作數,而不是操作符,這使得它很容易實現。
請注意,該版本假設操作數是輸入表達式上的單個數字。我這樣做是爲了簡化解析RPN表達式。在現實生活中,你會想要處理多位數的操作數。
std::stack<int> stack;
const char *expression="12+4*3+";
for(char c=*expression; c!=0; c=*expression++)
{
switch(c)
{
case '+':
{
int rhs=stack.top(); stack.pop();
int lhs=stack.top(); stack.pop();
int result=lhs+rhs;
stack.push(result);
break;
}
case '-':
{
int rhs=stack.top(); stack.pop();
int lhs=stack.top(); stack.pop();
int result=lhs-rhs;
stack.push(result);
break;
}
case '*':
{
int rhs=stack.top(); stack.pop();
int lhs=stack.top(); stack.pop();
int result=lhs*rhs;
stack.push(result);
break;
}
case '/':
{
int rhs=stack.top(); stack.pop();
int lhs=stack.top(); stack.pop();
int result=lhs/rhs;
stack.push(result);
break;
}
default:
int number=(c-'0');
stack.push(number);
break;
}
}
int final_result=stack.top();
std::cout << "result is " << final_result << std::endl;
'1243 + * +'不是'((1 + 2)* 4)+ 3'的逆波蘭表示法。 '12 + 4 * 3 +'是。 –
維基百科有關RPN的[有很好解釋和算法的文章](http://en.wikipedia.org/wiki/Reverse_Polish_notation)。 – legends2k
不錯SO帖子:http://stackoverflow.com/questions/12023151/prefixpolish-notation-evaluation-c – NathanOliver