请大家帮忙看看这个关于字符串分离的问题!谢谢(50分)

  • 主题发起人 主题发起人 yankk
  • 开始时间 开始时间
Y

yankk

Unregistered / Unconfirmed
GUEST, unregistred user!
if'4295965*13014752669'<>'' then
begin//1
s:='4295965*13014752669';
s1:=' ';
s2:=' ';
for i:=1 to length(s) do
begin//2
k:=i;
s1[k]:=s[k];
k:=k+1;
if s[k]='*' then
begin//3
for j:=1 to length(s)-i do
begin//4
k:=k+1;
s2[j]:=s[k];
end; //4
break;
end;//3
end;//2
edit1.Text:=s1;
edit2.Text:=s2;
end; //1
该过程是如果原字符串中的内容不为空则把s中*以前的字符拷贝到s1中,把s中*以后的字符拷贝到s2中,
运行的结果是首先出现Invalid pointer operation的错误,但是运行的结果是正确的,并且再关闭窗体时
也会出现同样的错误,请大家帮个忙!
 
Function Before ( Src:string ; S:string ) : string ;
Var
F : Word ;
begin
F := POS (Src,S) ;
if F=0 then
Before := S
else
Before := COPY(S,1,F-1) ;
end ;

procedure TForm1.Button1Click(Sender: TObject);
var
ss :String;
begin
ss :=Before('*','4295965*13014752669');
Edit1.Text :=ss;
end;

Function After ( Src:string ; S:string ) : string ;
Var
F : Word ;
begin
F := POS (Src,S) ;
if F=0 then
After := ''
else
After := COPY(S,F+length(src),length(s)) ;
end ;

procedure TForm1.Button2Click(Sender: TObject);
var
ss :String;
begin
ss :=After('*','4295965*13014752669');
Edit2.Text :=ss;
end;
 
function departstring(Ssource:string;var s1:string;var s2 :string):boolean;
begin
if not (Ssource='') then
try
s2:=copy(Ssource,0,pos('*',Ssource));
s2:=copy(Ssource,pos('*',Ssource),length(Ssource)-pos('*',Ssource));
result:=true
exception
result:=false
end
else
result:=false;
end;
 
头晕¥¥·#·—……*(()*—%……
 
function CheckSite(const Str, Ch: string; var Mystring: TStrings): boolean;
{字符串Str以Ch分隔成几段小字符串,该函数是将这些小字符串提取出来并保存在MyString中}
{截取字符串两边的空格}
var
sit, n : integer;
S : string;
begin
Result := True;
MyString.Clear;
S := Str;
n := Length(Ch);
while True do
begin
if Pos(Ch, S) = 0 then
begin
MyString.Add(S);
Break;
end;
sit := Pos(Ch, S);
MyString.Add(Copy(S, 1, sit - 1));
S := Trim(Copy(S, sit + n, Length(S)));
end;
if MyString.Count < 2 then Result := False;
end;

使用:
var
slTmp : TStrings;
s,s1,s2:string;
begin
s:= '4295965*13014752669';
slTmp := TStringList.Create;
CheckSite(s, '*', slTmp);
s1:=slTmp[0]; //得到'*'以前的字符
s2:=slTmp[1]; //得到'*'以后的字符
slTmp.Free;
end;
 
function seperatestring(S:string;var s1,s2 :string):string;
begin
try
if s<>'' then
begin
s1:=copy(s,1,pos('*',s)-1);
s2:=copy(s,pos('*',s)+1,length(s));
end;
except
result := 'seperate strings fail';
end;
result := 'seperate strings successfully!!';
end;

这么简单的问题,我没有看错把?
卷起千堆雪tyn居然也回答的这么麻烦,哈哈.
 
呵呵,robles的回答应该可以解决问题了,其它人的没看。我只想说说你的那个
Invalid pointer operation错误,原因是因为你的s1[k]:=s[k];s1只是一个指针,
并没有为它分配内存,所以不能用s1[k]来访问,除非你先用SetLength(s1,256)
之类的语句。
 
谢谢,谢谢各位的帮助!
 
同意 robles,但是改成下面的样子,更好一些,// 加了一个分隔字串参数
function seperatestring(S:string; sep:string; var s1,s2 :string):string;
begin
try
if s<>'' then
begin
s1:=copy(s,1,pos(sep,s)-1);
s2:=copy(s,pos(sep,s)+1,length(s));
end;
except
result := 'seperate strings fail';
end;
result := 'seperate strings successfully!!';
end;
 
后退
顶部