輸入為乙個整數四則運算表示式,可以有括號。
程式實現:
(這裡使用自己實現的棧類輔助操作)
**如下:
#include
#include
#include
using
namespace std;
/*---------------------------全域性變數---------------------------------*/
int priority_tab[6]
[6]=
;string operators
("+-*/()");
/*-------------------------函式和類宣告-------------------------------*/
template
<
class
t>
class
stack
;bool
check_balance
(const string& expr)
;vector
infix_to_postfix
(const string& infix)
;//中綴轉字尾
intcheck_priority
(char input,
char top)
;//檢查優先順序
intcalc_unit
(int opr1,
int opr2,
char op)
;//計算兩個資料的運算結果
intinfix_calc
(const string& infix)
;//計算中綴表示式的結果
intpop_two_operands_and_calc
(stack<
int>
& opr, stack<
char
>
& ope);//
/*---------------------------類的實現---------------------------------*/
template
<
class
t>
class
stack
;void
push_back
(const t& t)
; t pop_back()
;int
get_len()
t back()
private
: vector stack;};
template
<
class
t>
void stack
::push_back
(const t& t)
template
<
class
t>
t stack
::pop_back()
/*----------------------------主函式----------------------------------*/
intmain()
cout << endl;
cout <<
"its postfix is: "
<< endl;
vector postfix =
infix_to_postfix
(expression)
;for
(auto a = postfix.
begin()
; a != postfix.
end(
); a++
) cout <<
*a <<
" "
; cout << endl;
cout << endl;
cout <<
"the result of this infix expression is: "
<< endl;
int res =
infix_calc
(expression)
; cout << res << endl;
cout << endl;
system
("pause");
return0;
}/*---------------------------函式實現---------------------------------*/
intcheck_priority
(char input,
char top)
bool
check_balance
(const string& expr)}if
(symbols.
get_len()
)return
false
;else
return
true;}
vector
infix_to_postfix
(const string& infix)
if(digital.
length()
)//運算子
if(operators.
find
(infix[i]
)!= operators.npos)
//判斷符號是否合法
else
if(operators.
find
(infix[i])==
5)//遇到右括號
operators.
pop_back()
;//最後把左括號彈出
}elseif(
check_priority
(infix[i]
, operators.
back()
)==0)
//棧頂優先順序高且不是右括號
operators.
push_back
(infix[i]);
} i++;}
}while
(operators.
get_len()
)//最後如果棧非空,則彈出所有運算子
return postfix;
}int
calc_unit
(int opr1,
int opr2,
char op)
}int
infix_calc
(const string& infix)
if(digital_str.
length()
)//運算子
if(operators.
find
(infix[i]
)!= operators.npos)
//判斷符號是否合法
else
if(operators.
find
(infix[i])==
5)//遇到右括號
operators.
pop_back()
;//最後把左括號彈出
}elseif(
check_priority
(infix[i]
, operators.
back()
)==0)
operators.
push_back
(infix[i]);
} i++;}
}while
(operators.
get_len()
)//最後如果棧非空,則彈出所有
return operand.
pop_back()
;}intpop_two_operands_and_calc
(stack<
int>
& opr, stack<
char
>
& ope)
Java實現四則運算表示式計算
四則運算表示式計算 author penli public class arithmetic public static double arithmetic string exp 解析計算四則運算表示式,例 2 3 4 2 22 2 3 param expression return public ...
C 計算四則運算表示式程式
最近在學資料結構,剛學完expression tree,解答了我多年的疑惑。以前就想寫乙個二十四點的小遊戲,計算機發4張牌,玩家在規定時間內想出4張牌任意四則運算後得到24的表示式。框架搭好,也可以發牌了,電腦怎麼答題可以遍歷所有可能性,得到24就中止。但玩家輸入表示式,怎麼計算出值是關鍵問題。現在...
棧 四則運算表示式實現
棧的乙個常見應用,四則運算表示式求值。主要有兩個步驟 1,中綴轉字尾 2,字尾求值 實現起來比較簡單,我通過c 的容器stack實現一遍。從左到右遍歷中綴表示式的每個數字和符號,若是數字就輸出,即稱為字尾表示式的一部分,若是符號,則判斷其與棧頂符號的優先順序,是右括號或優先順序低於棧頂符號 乘除優先...