用于计算四则混合运算表达式的递归函数
来源:互联网
作者:west263.com
时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
sR = sExp.SubString(pos 1, posR - pos - 1);
if(sExp.IsDelimiter("/", pos) && sR == "0")
return("error:除数为零,无意义!");
sExp = (posL == 0? String(""): sExp.SubString(1, posL))
(sExp.IsDelimiter("*", pos)?
(sL.ToDouble() * sR.ToDouble()):
(sL.ToDouble() / sR.ToDouble()))
sExp.SubString(posR, sExp.Length());
}
if(IsMinus)
sExp = String("-") sExp;
// 经过上面的系列处理,sExp中的运算符号只剩下 和-了
// 以下处理不带括号表达式中的 -序列
IsMinus = false; // 加数或减数的符号
while(sExp.LastDelimiter(" -")) // 存在 或-
{
for(pos=2; !sExp.IsDelimiter(" -", pos)
&& pos <= sExp.Length(); pos ); // 第一个 或-
// pos不从1而从2开始搜索,是为了应对首操作数为负的情况
if(pos == sExp.Length())
return("error:尾字符是 -运算符, 公式错!");
if(pos > sExp.Length())
return(sExp); // sExp是个简单的负数,不必计算
Minus1:
for(posR=pos 1; !sExp.IsDelimiter(" -", posR)
&& posR <= sExp.Length(); posR );
if(posR == sExp.Length())
return("error:尾字符是 -运算符, 公式错!");
if(sExp.SubString(pos, 2) == " -"
|| sExp.SubString(pos, 2) == "--") // 加数或减数为负
{
sExp.Delete(pos 1, 1);
IsMinus = !IsMinus;
goto Minus1;
}
// 此处跳转在正常情况下最多只会执行一次
sL = sExp.SubString(1, pos - 1);
sR = sExp.SubString(pos 1, posR - pos - 1);
sExp = String(sExp.IsDelimiter(" ", pos)?
(sL.ToDouble() sR.ToDouble() * (IsMinus? -1: 1)):
(sL.ToDouble() - sR.ToDouble() * (IsMinus? -1: 1)))
sExp.SubString(posR, sExp.Length());
}
return(sExp);
}
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



