下面的程序代码看不懂(C++Builder代码)还望有人帮忙写一下详细注释!!多谢!!

「已注销」 2012-06-04 09:37:04
while (First)
//循环计算乘、除
{
AnsiString tmpStr=Str.SubString(1,First-1);
int tmp=LastPos(tmpStr);
AnsiString Left=Str.SubString(1,tmp);
AnsiString Mul1=Str.SubString(tmp+1,First-tmp-1);
tmpStr=Str.SubString(First+1,Str.Length()-First);
tmp=FirstPos(tmpStr);
if (tmp==500)
{
Mul2=tmpStr;
Right="";
}
else
{
Mul2=tmpStr.SubString(1,tmp-1);
Right=tmpStr.SubString(tmp,tmpStr.Length()-tmp+1);
}
if (MulPos>DivPos)
Middle=IntToStr(StrToInt(Mul1)/StrToInt(Mul2));
else
Middle=IntToStr(StrToInt(Mul1)*StrToInt(Mul2));
Str=Left+Middle+Right;

MulPos=Str.Pos("*");
DivPos=Str.Pos("/");
First=MulPos;
if(MulPos>DivPos)
First=DivPos;

if (DivPos==0&&MulPos!=0)
{
First=MulPos;
DivPos=5000;
//除号设置为不可能的值
}
if (DivPos!=0 && MulPos==0)
{
First=DivPos;
MulPos=5000;
//乘号设置为不可能的值
}
}
...全文
170 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
路过路人乙 2012-06-10
  • 打赏
  • 举报
回复
while (First)
//循环计算乘、除
{
AnsiString tmpStr=Str.SubString(1,First-1); //截取Str字符串第一位至First-1位的值,后面均同理
int tmp=LastPos(tmpStr); //这个函数是你们自定义的吧..作用不明确.
AnsiString Left=Str.SubString(1,tmp);
AnsiString Mul1=Str.SubString(tmp+1,First-tmp-1);
tmpStr=Str.SubString(First+1,Str.Length()-First);
tmp=FirstPos(tmpStr); //这个函数是你们自定义的吧..作用不明确.
if (tmp==500) //等于或者不等于500的时候对Mul2,Right赋值
{
Mul2=tmpStr;
Right="";
}
else
{
Mul2=tmpStr.SubString(1,tmp-1);
Right=tmpStr.SubString(tmp,tmpStr.Length()-tmp+1);
}
if (MulPos>DivPos)
Middle=IntToStr(StrToInt(Mul1)/StrToInt(Mul2)); //如果MulPos>DivPos则Middle等于Mul1除以Mul2.取整,否则等于Mul1乘以Mul2
else
Middle=IntToStr(StrToInt(Mul1)*StrToInt(Mul2));
Str=Left+Middle+Right;

MulPos=Str.Pos("*");//MulPos为Str字符串中乘号的位置.
DivPos=Str.Pos("/");//DivPos为Str字符串中除号的位置.
First=MulPos; //对First重新赋值.
if(MulPos>DivPos) //如果乘号在前面,就将除号的位置值赋给First
First=DivPos;

if (DivPos==0&&MulPos!=0) //如果无除,并且有乘号.就将乘号位置值赋给First并重置DivPos.下面一个if刚好和这行相反.
{
First=MulPos;
DivPos=5000;
//除号设置为不可能的值
}
if (DivPos!=0 && MulPos==0)
{
First=DivPos;
MulPos=5000;
//乘号设置为不可能的值
}
}


全部解释完毕..解释完毕后更加迷糊这段代码了...感觉是在解析运算公式...好像还是个死循环...
dataxdata 2012-06-10
  • 打赏
  • 举报
回复
应该是个计算表达式的过程

第一段把表达式str以First为界分成前后两个部分,其中前面的部分,通过LsatPos函数(猜测这个函数是查找最后的运算符的位置)再分成两个部分,前面的部分仍是表达式,称作Left,后面的部分就是要计算的数值Mul1;str的后半段照此处理,通过FirstPos函数,提取数值Mul2和后面的表达式Right

第二段对Mul1和Mul2进行运算,结果存到Middle字符串中,再将Left、Middle和Right拼成新的表达式

第三段搜索新的表达式,如果还有乘号或除号,就把First赋值为第一个运算符的位置,继续循环处理,如果没找到乘号或除号,则表示表达式计算完毕,First为0,退出循环
CCED136 2012-06-05
  • 打赏
  • 举报
回复
你带上 一段测试用的 Str 值 和 first 值 , 让大家给你看看.

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧