目前我有个需求,要求取得给定字符串计算后的数值。如:“20+3*5-10/2.5”将返回——31
表达式中可能出现的运算符号包括 + -
×
/
暂不考虑括号及符号还有其它特殊运算符,但会有小数
private const char EndChar = ';';
private const char Inter_Minus =
'#';//内部负号
private const char FlagChar = '$';
private static readonly char[] InvalidChars = new char[] { EndChar,
Inter_Minus, FlagChar };
private static readonly char[] Symbols = new char[] { '*', '/',
'+', '-', '(', ')' };
private static readonly char[] Symbols_Simple = new char[] { '*',
'/', '+', '-', EndChar };
public static double EvaluateSimpleexpression_r(string
expression)
{
double result = 0;//结果
double data = 0;//中间结果
string dataStr;
char opera, topopera;
int index;
ArrayList NS = new
ArrayList();
//数栈
ArrayList OS = new
ArrayList();
//运算符栈
expression += EndChar;
if (expression[0] == '-' || expression[0] == '+')
expression = "0" + expression;
while ((index = expression.IndexOfAny(Symbols_Simple)) != -1)
{
if (index !=
0)
//数据
{
try
{
dataStr = expression.Substring(0, index);
if (dataStr[0] == Inter_Minus) dataStr = "-" + dataStr.Remove(0,
1);
data = double.Parse(dataStr);
NS.Add(data);
expression = expression.Substring(index, expression.Length -
index);
}