Edit1.Text里有字符串:1,2,3,4,
然后我把这些字符串赋值给数组idArray
Edit2.Text输入1或2或3或4来进行数组删除,我输入2删除后Edit1.Text里的结果是1,3,4,
我再输入3删除后Edit1.Text里的结果是1,4,1,4,
现在问题来了,输入3删除后为什么Edit1.Text里的结果不是1,4,呢?而是1,4,1,4,呢?
输入4删除后结果是1,1,1,1,呢?为什么不是1,呢?procedure TForm1.Button1Click(Sender: TObject);
var
count,i,j,t:integer;
s:string;
begin
s:=Edit1.Text;
count:=0;
for i := 1 to Length(s) do
begin
if s[i] = ',' then Inc(count);
end; for i:=1 to count do
begin
if (copy(s,1,pos(',',s)-1)<>',') and (copy(s,1,pos(',',s)-1)<>'') then
begin
SetLength(idArray, Length(idArray)+1);
idArray[Length(idArray)-1]:=strtoint(copy(s,1,pos(',',s)-1));
s:=copy(s,pos(',',s)+1,length(s));
end;
end; for i:=Low(idArray) to High(idArray) do//删除数组某个元素
begin
if idArray[i]=strtoint(Edit2.Text) then
begin
SetLength(idArray, Length(idArray)+1);
t:=idArray[high(idArray)];
idArray[i]:=t;
setlength(idArray,length(idArray)-1);
end;
end; s:='';
for i:=Low(idArray) to High(idArray) do
begin
if idArray[i]<>0 then
begin
if s='' then
s:=inttostr(idArray[i])
else
s:=s+','+inttostr(idArray[i]);
end;
end; Edit1.Text:=s+',';
end;
然后我把这些字符串赋值给数组idArray
Edit2.Text输入1或2或3或4来进行数组删除,我输入2删除后Edit1.Text里的结果是1,3,4,
我再输入3删除后Edit1.Text里的结果是1,4,1,4,
现在问题来了,输入3删除后为什么Edit1.Text里的结果不是1,4,呢?而是1,4,1,4,呢?
输入4删除后结果是1,1,1,1,呢?为什么不是1,呢?procedure TForm1.Button1Click(Sender: TObject);
var
count,i,j,t:integer;
s:string;
begin
s:=Edit1.Text;
count:=0;
for i := 1 to Length(s) do
begin
if s[i] = ',' then Inc(count);
end; for i:=1 to count do
begin
if (copy(s,1,pos(',',s)-1)<>',') and (copy(s,1,pos(',',s)-1)<>'') then
begin
SetLength(idArray, Length(idArray)+1);
idArray[Length(idArray)-1]:=strtoint(copy(s,1,pos(',',s)-1));
s:=copy(s,pos(',',s)+1,length(s));
end;
end; for i:=Low(idArray) to High(idArray) do//删除数组某个元素
begin
if idArray[i]=strtoint(Edit2.Text) then
begin
SetLength(idArray, Length(idArray)+1);
t:=idArray[high(idArray)];
idArray[i]:=t;
setlength(idArray,length(idArray)-1);
end;
end; s:='';
for i:=Low(idArray) to High(idArray) do
begin
if idArray[i]<>0 then
begin
if s='' then
s:=inttostr(idArray[i])
else
s:=s+','+inttostr(idArray[i]);
end;
end; Edit1.Text:=s+',';
end;
解决方案 »
- delphi中能这样子更新数据么?
- 急求救:如何用format把接收到的整形数转换成字符
- 如何降低Delphi开发的程序对系统资源的占用
- Runtime error 216 at 0040328A
- 请问如何用delphi来读股票数据文件.day呢?
- 如何弹出一个带超链接的消息框?
- 如何用直线把圆分成N等份?
- 请问各位高手:如何实现将多个jpg尺寸不一图片存储到单一的文件中,并能快速检索回放?有点类似mjpeg
- 子窗口问题
- 怎样实现CASE语句中表达式的值可以为字符型
- 自以为水平很高,动不动就损别人是白痴的人,和痞子的区别仅在于他有文化,有文化的痞子才是真痞子
- 翻译一下Oracle 11 authentication in the Direct mode is supported
加一句就可以了。begin
s:=Edit1.Text;
count:=0;
idArray:= nil; //释放(清空)动态数组
for i := 1 to Length(s) do
begin
if s[i] = ',' then Inc(count);
end;
begin
if idArray[i]=strtoint(Edit2.Text) then
begin
SetLength(idArray, Length(idArray)+1);
t:=idArray[high(idArray)];
idArray[i]:=t;
setlength(idArray,length(idArray)-1);
end;
end;这个蹩脚的逻辑还是换掉吧
1 首先数组不像链表提供删除功能,因为他是连续分配的空间,能随便删除那就不是连续了
2 如果想删除可以用两种方法
1) 清零
2)目标之后所有元素向前移动
3 建议LZ还是用tlist,tstringlist之类的东西代替数组吧