本篇文章為大家展示了C#中怎么利用棧實現加減乘除運算,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

創新互聯建站主營阿勒泰網站建設的網絡公司,主營網站建設方案,成都app軟件開發,阿勒泰h5微信小程序開發搭建,阿勒泰網站營銷推廣歡迎阿勒泰等地區企業咨詢
首先遇到左括號,直接壓入運算符棧,然后是3,直接壓入數棧,然后遇到5,壓入數棧,遇到*,將其壓入運算符棧,遇到右括號,將運算符棧頂的*取出,取出兩個數棧棧頂的數,進行乘法運算,將運算結果壓入數棧,因為此時運算符棧頂仍不是左括號,取出棧頂的+號,拿出數棧棧頂的兩個數,進行加法運算,并將結果壓入數棧。此時棧頂是左括號了,那么將左括號彈出棧。此時數棧里還有一個23,運算符棧為空。接著來。此時輪到了+號,直接壓入數棧,遇到3,直接壓入數棧。此時發現串已經結尾了,但是運算符棧還沒有清空。那么就清空吧,把+號拿出來,數棧的23和3拿出來,加法運算,結果壓入數棧。此時運算符棧清空,數棧剩個26。這就是最后的結果。是不是很簡單但是有一點云里霧里。。
說一下運算規則吧。優先級大家都知道了,優先級從高到低依次是 "*/","+-","()",每當要壓運算符時,首先得看看運算符棧里有什么,如果沒有,肯定是可以直接壓入的,左括號也是可以不管三七二十一直接壓入的,除此之外,如果遇到棧頂運算符優先級更高時,是必須將棧頂運算符先取出來運算,直到棧頂元素優先級小于或者等于要壓入的運算符的優先級才可壓入。比如3*5+5+5,在壓入第一個+號時,必須先將棧里的*號先拿出來運算結束后,才能放進去,否則計算結果將是錯誤的。當壓入的是右括號時,必須一直彈運算符棧進行運算,直到遇到左括號為止。當串掃描到末尾時,也必須將運算符棧清空,最后留在數棧的數就是結果。關于小數點,關于復數加減運算,我寫的小程序里有了一定的處理
就類似于這樣的簡單功能。。。。恩,將就看看吧。。程序不完善,不過也懶得改了,畢竟是練習,最近事又多。
下面貼一下源碼
主要用到的幾個類和方法:
類Parser 的parse方法,比如給一個“3+4i”的字符串,返回給你一個3個結點的隊,隊列第一個元素是一個ComplexNumber對象,實數域為3,隊列的第二個元素是“+”號,隊列第三個元素是一個ComplexNumber對象,實數域為0,虛數域為4。
類Operators 用于測試字符是否是運算符,用來進行控制運算,比較運算符優先級....
類Handler 給一個字符串,他幫你處理,返回給你一個結果。其實就是調一下Parser類的方法去解析一下字符串,然后算一下結果,然后返回結果。
類ComplexNumber,就是復數類啊,不用說了,提供實數域虛數域,getset方法,加減乘除以及toString()方法
using System;using System.Collections;using System.Text;namespace MySpace{class Parser{public static Queue Parse(string input){char[] arr = input.ToCharArray();Queue queue = new Queue();foreach(char x in arr){queue.Enqueue(x);}queue = ParseStringQueue(queue);return queue;}//傳入字符串隊列,返回封裝好的隊列。//ComplexNumber對象或char類型運算符各占用一個結點private static Queue ParseStringQueue(Queue queue){Queue secondQ = new Queue();char c;StringBuilder sb = null;string temp;int count = queue.Count;bool flag = false; //false表示允許創建新SB對象進行緩存數字字符串for(int i=0;iDon_Yao整合修復一些bug后的代碼
using System;using System.Collections;using System.Collections.Generic;using System.Text;// 解析計算字符串公式namespace CalcuStrFormula{ // 處理類 class Handler { private Stack _complexNumberStack = new Stack(); private Stack _operatorStack = new Stack(); private Parser _parser = new Parser(); private Operators _operators = new Operators(); private static Handler _instance; public static Handler instance { get { if (_instance == null) { _instance = new Handler(); } return _instance; } } public ComplexNumber Process(string inputString) { _complexNumberStack.Clear(); _operatorStack.Clear(); Queue
上述內容就是C#中怎么利用棧實現加減乘除運算,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創新互聯行業資訊頻道。
網站題目:C#中怎么利用棧實現加減乘除運算
轉載源于:http://www.xueling.net.cn/article/ppisec.html