字符串问题 ( 积分: 200 )

  • 主题发起人 主题发起人 启明星
  • 开始时间 开始时间

启明星

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个字符串,如下:
|0001,第一|+(|1002,第二|-|h3,第四|)*|f6,第五|
要把它变成0001+(1002-h3)*f6
该怎么做?
 
有一个字符串,如下:
|0001,第一|+(|1002,第二|-|h3,第四|)*|f6,第五|
要把它变成0001+(1002-h3)*f6
该怎么做?
 
说明白点,看不太懂
 
刚才可能有点错误,就是在每两个||之间的字符串,再取出逗号前面的那个字符串,计算符号不变
 
你是针对这一个字符串还是要写一个处理此类字符串的函数呀?
 
简单啊,自己写一个函数把字符串中的表达式解析出来就可以了
function AnalyExpression(SourceS:string):string;
var
DesS:string;
i,l:integer;
HasSubStr,SubStrIsOK:boolean;
begin
if SourceS<>'' then
begin
i:=1;
l:=Length(SourceS);
DesS:='';
HasSubStr:=false;
While i<=l do
begin
case SourceS of
'|':
begin
HasSubStr:=not HasSubStr;
if HasSubStr then
SubStrIsOK:=false
end;
',':
if HasSubStr then
SubStrIsOK:=true;
'(',')','+','-','*','/':
if not HasSubStr then
DesS:=DesS+SourceS;
else
if HasSubStr and not SubStrIsOK then
DesS:=DesS+SourceS
end;
inc(i)
end;
Result:=DesS
end
else
Result:=''
end;
 
为你量身定做的,试试吧:
procedure TForm1.Button1Click(Sender: TObject);
var
ConStr,Str:String;
ResultStr:String;
i,j,StrLen:Integer;
begin
ResultStr:='';
ConStr:='|0001,第一|+(|1002,第二|-|h3,第四|)*|f6,第五|';
StrLen:=Length(ConStr);
i:=Pos('|',ConStr)
//第一个'|'的位置
j:=Pos(',',ConStr)
//第一个','的位置
while j<>0 do
begin
if i=1 then
begin
ResultStr:=ResultStr+Copy(ConStr,i+1,j-i-1);
ConStr:=Copy(ConStr,j+1,StrLen-j);
StrLen:=Length(ConStr);
i:=Pos('|',ConStr);
j:=Pos(',',ConStr);
end
else
begin
ConStr:=Copy(Constr,i+1,StrLen-i);
StrLen:=Length(ConStr);
i:=Pos('|',ConStr);
ResultStr:=ResultStr+Copy(ConStr,1,i-1);
ConStr:=Copy(Constr,i,StrLen-i+1);
StrLen:=Length(ConStr);
i:=Pos('|',ConStr);
j:=Pos(',',ConStr);
end;
end;
showmessage(ResultStr);
end;
 
忘了一点,要改为一个函数很简单:
function myfunc(str:string):string;
...
begin
ConStr:=str
//把第一句改为这句
...
result:=ResultStr
//最后加这句就行了
end;
 
okokok,非常好,谢谢各位拉
 
多人接受答案了。
 

Similar threads

回复
0
查看
1K
不得闲
回复
0
查看
864
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部