含括號的四則運算

2021-07-22 13:52:50 字數 1131 閱讀 8939

總體思路:需要用到棧,從中綴表示式到字尾表示式,再把字尾表示式轉化為結果,比如計算9+(3-1)*5+4/2,這個式子就叫做中綴表示式,然後我們需要把它轉化成字尾表答式,方法將中綴表示式從左到右讀取,如果是數字,直接輸出到字尾表示式,如果是字元,則如果是右括號,把從棧頂開始到棧中左括號的字元輸出到字尾表示式,如果是運算子,優先順序不比棧頂元素(只能是字元,遇到括號停止)高的,輸出到字尾表示式,當讀取完後,棧還有剩餘,全部從棧頂輸出到字尾表示式,這樣,字尾表示式就是931-5*+42/+;

然後把字尾表示式轉化為結果,方法:從左到右讀取字尾表示式,如果是數字,則進棧,如果是運算子#,把棧頂的第乙個字元取出來當作a,再把棧頂的第二個取出來當作b,進行b#a的運算,再把結果放進棧,知道讀取完畢後,棧中的數字就是答案。

所以,在中綴表示式轉換到字尾表示式中,我們可以用a棧存字尾表示式中的數字,b棧存還沒處理完畢的運算子,當有運算子要輸出到字尾表示式了,馬上用a棧的前兩個字母進行運算即可。下面的**支援輸入小數。

**如下:

#include#include#include#include#include#include#includeusing namespace std;

stacka;//存運算子

stackb;//存數字

void calulate(char to)//運算子輸出到字尾表示式時,進行運算

}int main()

b.push(d);

i--;

}else if (s[i] >= '0'&&s[i] <= '9')

i--;

b.push(d);

}else

else

a.pop();

}else}}

else

else}}

a.push(s[i]);}}

}}

} while (!a.empty())//棧中剩餘的運算子,也要進行運算

cout << "="<< b.top() << endl;

}}

四則運算(含括號)C

輸入乙個表示式 用字串表示 求這個表示式的值。保證字串中的有效字元包括 0 9 且表示式一定合法。資料範圍 表示式計算結果和過程中滿足 val le 1000 val 1000,字串長度滿足 1 le n le 1000 1 n 1000 輸入乙個算術表示式 得到計算結果 輸入 3 2 輸出 25 ...

帶括號的四則運算

帶括號的四則運算 public class caculatordemo 帶括號的四則運算 param exp return public static double calckuohao string exp else 不帶括號的四則運算 param exp return public static...

C C 含括號的四則運算(棧方式實現)

使用棧來實現含括號的四則運算,複雜的就是各種分支的判斷,當時參考了很多前輩的 又自己敲了很久,得到乙個最終版,在此記錄一下,希望若干年後的自己看到時能夠不忘初心。include include 資料棧 struct shuju 符號棧 struct fuhao void initoperatenum...