快速业务通道

用于计算四则混合运算表达式的递归函数第二版

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
)
+ sTmp.SubString(posR + 1, sTmp.Length());
}
// 以下处理int取整函数
while(pos = sExp.AnsiPos("int"))
{
posL = pos + 2;
for(posR = posL + 2; !sExp.IsDelimiter("+-*/", posR)
&& posR <= sExp.Length(); posR++); // 其后第一个+-*/
// posR不从posL + 1而从posL + 2开始搜索,是为了应对操作数为负的情况
sExp = sExp.SubString(1, pos - 1)
+ floor(sExp.SubString(posL + 1, posR - posL - 1).ToDouble())
+ sExp.SubString(posR, sExp.Length());
// 本文转自 C++Builder研究 - http://www.ccrun.com/article.asp?i=636&d=x5fncl
}
// 以下处理不带括号表达式中的*/序列
IsMinus = false; // IsMinus->当前*/序列的符号
while(sExp.LastDelimiter("*/")) // 存在*或/
{
for(pos = 1;!sExp.IsDelimiter("*/", pos)
&& pos <= sExp.Length(); pos++); // 第一个*或/
if(pos == 1 || pos == sExp.Length())
return("error:首或尾字符是*/运算符, 公式错!");
// posL->第一个*/之前的第一个+-
posL = sExp.SubString(1, pos - 1).LastDelimiter("+-");
Minus0:
for(posR = pos + 1;!sExp.IsDelimiter("+-*/", posR)
&& posR <= sExp.Length(); posR++);
// posR->第一个*/之后的第一个+-*/运算符
if(posR == (pos + 1) && sExp.IsDelimiter("*/", posR))
return("error:*/运算符相邻, 公式错!");
if(posR == sExp.Length())
return("error:尾字符是 + - */运算符, 公式错!");
if(sExp.SubString(pos, 2) == "*-"
|| sExp.SubString(pos, 2) == "/-") // 乘数或除数为负
{
sExp.Delete(pos + 1, 1);
IsMinus = !IsMinus;
goto Minus0;
}
sL = sExp.SubString(posL + 1, pos - posL - 1);
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:尾字符是+-运算符,公式错!"

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号