今天寫了乙個表示式求值的程式。基本功能為:輸入乙個表示式比如23*34-21+(56*(45-1)) 然後程式求出結果。而且按照四則運算的優先順序,同時支援括號。下面是程式執行的畫面:
程式的難點在於把乙個字串分解為運算元和操作符並能正確處理各個操作符的優先順序,特別是有括號的情況。本程式主要採用了傳統的方法建立了運算元棧和操作符棧。關於操作符優先順序的處理採用了乙個關聯陣列來處理。還有很多其他的細節都在**中。廢話少說下面是程式的源**:
#include#include#include#includeusing namespace std;
class caculation
void inline print_result()
};
#include"caculate.h"
#includevoid caculation::print_ifo()
else
right=num.top();
num.pop();
left=num.top();
num.pop();
switch(operation.top())
num.push(result);
operation.pop();
}//end else
}//end while
}//end if
}//end for
}//end caculate
#include"caculate.h"
void main()
}
該程式還有很多問題比如:一、不能處理運算元為負數的情況。
二、計算完乙個表示式之後沒有對棧進行清理,導致隨著運算的進行記憶體占用越來越多。
棧實現表示式求值(C
為了實現用棧計算算數表示式的值,需設定兩個工作棧 用於儲存運算子的棧opter,以及用於儲存運算元及中間結果的棧opval。演算法基本思想如下 1 首先將運算元棧opval設為空棧,而將 作為運算子棧opter的棧底元素,這樣的目的是判斷表示式是否求值完畢。2 依次讀入表示式的每個字元,表示式須以 ...
字尾表示式實現表示式求值
看到別人寫的乙個表示式求值程式,想到很久之前寫的乙個。中間有個字串轉數值型,可以用stringstream來實現或者c語言裡面的strtod直接得到 include include include include includeusing namespace std class data doubl...
C 表示式求值
1 問題描述 輸入為四則運算表示式如 2 3 5 7 9 3,僅由 構成,沒有空格,要求其值。2 問題分析 有兩種方法,一是用遞迴,將表示式分解為項和因子,再通過遞迴逐塊解決。其中,我們需要清楚的是,表示式為項的加減,項為因子的乘除,因子為數值或帶括號的表示式。第二種方法是通過堆疊,先將表示式轉化成...