例如:有字符串算式'5*6+3.5',如何得到这个字符串算式的值
解决方案 »
- FastReport中的求和问题
- 在Delphi中如何做Access数据库的备份??请高手帮忙一下.
- 请问如何把ImageList控件中的图形位置相互移动呢?如,我想把2与6相互交换位置,请问如何做呢?
- 为何线程中不能改变窗体元素,请大虾帮忙看下代码.
- 如何在图像中坐标定位?
- 我没用过Delphi,只是临时编译一个DLL文件,是Delphi超级菜鸟,只会编译,不知下面错误是何原因?
- 问一下有没有像98里磁盘整理时显示一格一格进度的控件?关注者有分
- 有鬼!来抓鬼呀!为何在一个多表查询(ADOQUERY)中提交(Post)了一条记录以后,发现这条记录中的数据又不见了?不知道哪位会抓这鬼的!
- DBGridEh变色问题,请进!
- 问问问:如何用Twebbrowser控件将打开的页面保存为mht格式?
- 求助关于记录添加的一个问题
- fastreport报表小问题
·当读到数字直接送至输出队列中
·当读到运算符t时,
a.将栈中所有优先级高于或等于t的运算符弹出,送到输出队列中;
b.t进栈
·读到左括号时总是将它压入栈中
·读到右括号时,将靠近栈顶的第一个左括号上面的运算符全部依次弹出,送至输出队列后,再丢弃左括号。
//表达式的计算——中缀表达式改为后缀表达式
const
smaxsize=100;
type
selement=char;
sposition=0..smaxsize;
stack=record
data:array[1..smaxsize]of selement;
top:sposition;
end;
var
s:stack;
strin,strout:string;procedure screat(var s:stack);
begin
s.top:=0;
end;function sempty(var s:stack):boolean;
begin
if s.top=0 then sempty:=true
else sempty:=false;
end;function sfull(var s:stack):boolean;
begin
if s.top=smaxsize then sfull:=true
else sfull:=false;
end;procedure spush(e:selement;var s:stack);
begin
inc(s.top);
s.data[s.top]:=e;
end;procedure spop(var e:selement;var s:stack);
begin
e:=s.data[s.top];
dec(s.top);
end;procedure stop(var e:selement;var s:stack);
begin
e:=s.data[s.top];
end;function first(t:selement):integer;
begin
case t of
'(':first:=0;
'+','-':first:=1;
'*','/':first:=2;
end;
end;procedure change(strin:string;var strout:string;var s:stack);
var
t:selement;
md,me,mt:set of selement;
i,j:integer;
begin
md:=['0'..'9',' ',';'];me:=['+','-','*','/','(',')'];
mt:=md+me;
strin:=strin+';';
spush('(',s);
for i:=1 to length(strin) do
case strin of
'0'..'9':strout:=strout+strin;
'(':spush(strin,s);
')',';':repeat
spop(t,s);
if t<>'(' then
strout:=strout+t;
until (t='(')or(sempty(s));
'+','-','*','/':begin
stop(t,s);
while first(strin)<=first(t) do
begin
spop(t,s);
strout:=strout+t;
stop(t,s);
end;
spush(strin,s);
end;
end;
end;begin
strout:='';
writeln;
writeln;
write('enter a formual:');
readln(strin);
while pos(' ',strin)<>0 do delete(strin,pos(' ',strin),1);
screat(s);
change(strin,strout,s);
writeln('output formual is :',strout);
readln;
end.