字串表示式計算c#程式設計
在程式設計應用程式過程中,有時需要字串表示式的值。如字串:"23+56/(102-100)*((36-24)/(8-6))",結果=191。
根據資料結構棧的應用介紹,通過把表示式由中序式轉換成後序式,再用棧來進行計算。如上述字串表示式:"23+56/(102-100)*((36-24)/(8-6))",轉換為後序時為:"23|56|102|100|-|/|*|36|24|-|8|6|-|/|*|+"(其中字元"|"為分隔符)。
本程式**如下:在visual .net 2003 +winxp下編譯通過。
using system;
using system.drawing;
using system.collections;
using system.componentmodel;
using system.windows.forms;
using system.data;
namespace stringexpressioncalculate
///
/// 清理所有正在使用的資源。
///
protected override void dispose( bool disposing )
}base.dispose( disposing );
}#region windows 窗體設計器生成的**
///
/// 設計器支援所需的方法 - 不要使用**編輯器修改
/// 此方法的內容。
///
private void initializecomponent()
#endregion
///
/// 應用程式的主入口點。
///
private void button1_click(object sender, system.eventargs e)
//中序轉換成後序表示式再計算
// 如:23+56/(102-100)*((36-24)/(8-6))
// 轉換成:23|56|102|100|-|/|*|36|24|-|8|6|-|/|*|+"
//以便利用棧的方式都進行計算。
private string calculateparenthese***pression(string expression)
expressionstring += operand3 + "|";
}//取「c」處理
if(expression.length >0 && expression[0].tostring() == "(")
//取「)」處理
operand3 = "";
if(expression.length >0 && expression[0].tostring() == ")")
else
}while(true);
expressionstring += operand3;
expression = expression.substring(1);
}//取運算符號處理
operand3 = "";
if(expression.length >0 && (expression[0].tostring() == "*" || expression[0].tostring() == "/" || expression[0].tostring() == "+" || expression[0].tostring() == "-"))
else
}else
expression = expression.substring(1); }}
operand3 = "";
while(operatorlist.count != 0)
expressionstring += operand3.substring(0, operand3.length -1); ;
return calculateparenthese***pressionex(expressionstring);
// 第二步:把轉換成後序表達的式子計算
//23|56|102|100|-|/|*|36|24|-|8|6|-|/|*|+"
private string calculateparenthese***pressionex(string expression)
else
}return operandlist[0].tostring();
}//判斷兩個運算子優先級別
private bool verifyoperatorpriority(string operator1,string operator2)
//計算
private float calculate(float operand1, float operand2,string operator2)
return operand1;}}
}
如何計算字串表示式
using system using system.codedom using system.codedom.piler using microsoft.csharp using system.reflection public class eval r n public object getval...
棧實現字串表示式計算
最近頻繁解決計算方面的問題,其中就有實現字串表示式計算返回結果值需求,通過使用棧實現,需要定義運算符號優先順序,其它就不細說,如下 csstack.cs using system namespace pyhb 設定棧大最大容量 public void initialize int size 入棧 p...
計算字串表示式的值
舉個簡單的例子,平常我們寫的數學表示式a b,就是一種中綴表示式,寫成字尾表示式就是ab 再舉乙個複雜的例子,中綴表示式 a b c a b e的逆波蘭式是ab c ab e 1 首先,需要分配1個棧,用於臨時儲存運算子,此運算子在棧內遵循越往棧頂優先順序越高的原則 2 從中綴式的左端開始逐個讀取字...