C 實現四則運算表示式的計算

2021-09-12 01:16:47 字數 3953 閱讀 6719

輸入為乙個整數四則運算表示式,可以有括號。

程式實現:

(這裡使用自己實現的棧類輔助操作)

**如下:

#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實現一遍。從左到右遍歷中綴表示式的每個數字和符號,若是數字就輸出,即稱為字尾表示式的一部分,若是符號,則判斷其與棧頂符號的優先順序,是右括號或優先順序低於棧頂符號 乘除優先...