vb四则运算式

时间:2018.10.30 发布人:lenovobears

vb四则运算式

已解决问题

谷歌lenovobears用户在2018.10.30提交了关于“希灵帝国vb四则运算式”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-03-01T21:10:20。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,谢了,下次有事儿别忘了找我 !

希望以下的回答,能够帮助你。

第1个回答

用户名:匿名用户  


'这个程序是表达式运算程序,支持0-9数字输入,小数点,+,-,*,、四则运算及括号

'expression函数式调用程序,输入为表达式字符串,返回值为结果字符串,在你的程序中只需要在等号处理程序中调用。若满意请及时采纳,谢谢

DimMYNAME$(100)

Dimtrack$(100),oper$(100)

Dimtrackp,operpAsInteger

'按钮计算表达式

PrivateSubCommand1_Click()

Text2=expression(Text1)'调用实例

EndSub

PrivateFunctionexpression(a$)AsString

p=1:c$=""

trackp=0:operp=0'栈初始化

MYNAME$(p)="":plag=0

Fori=1ToLen(a$)'扫描全输入

b$=Mid$(a$,i,1)'取一字符

Ifb$="+"Orb$="-"Orb$="*"Orb$="/"Orb$="("Orb$=")"Then'运算符

Ifplag=0Thenp=p+1:plag=1'第一次遇到运算符则指针后移,并记录标志

MYNAME$(p)=b$:p=p+1'记录运算符,指针后移

MYNAME$(p)=""'初始化下一段记录

Else

MYNAME$(p)=MYNAME$(p)+b$:plag=0'是数字,则记录,并复制标志

EndIf

Nexti

p=p+1'加入#作为结束标志

MYNAME$(p)="#"

s$=""

PUSh**TRACK"#"'栈底标志

Fori=1Top'循环扫描

a$=MYNAME$(i)'取一个段

Ifa$=""Then

ElseIfa$="#"Then

Do

c$=POPTRACK

Ifc$="#"ThenExitDo

PUSh**OPERc$'出内容进后缀缓冲

Loop

ExitFor

ElseIfa$"+"Anda$"-"Anda$"*"Anda$"/"Anda$")"Anda$"("Then'不是运算符

PUSh**OPER(a$)'直接进后缀缓冲

ElseIfa$="("Then'是左括号

PUSh**TRACKa$'直接进栈

ElseIfa$=")"Then'是右扩括号

Do

c$=POPTRACK'出直到遇到左括号

Ifc$="("ThenExitDo

PUSh**OPERc$'出内容进后缀缓冲

Loop

Else

c$=POPTRACK

Ifc$="#"Then'空栈,直接写入

PUSh**TRACKc$

PUSh**TRACKa$

Else

Do

'是运算符,栈顶退栈

IfISP(c$)>=ISP(a$)Then'栈内运算符优先于该运算符

PUSh**OPERc$

c$=POPTRACK

Else

PUSh**TRACKc$

PUSh**TRACKa$

ExitDo

EndIf

Loop

EndIf

EndIf

Nexti

Fori=1Tooperp

s$=s$+oper$(i):Ifi

Nexti

s=0:trackp=0

Fori=1Tooperp

a$=oper$(i)

IfLeft$(a$,1)>="0"AndLeft$(a$,1)