procedure TForm1.Button1Click(Sender: TObject);
var
i, k, j, n, m, Temp: integer;
A1: array of integer;begin
n := Memo1.Lines.Count;
setlength(A1,n);
Temp := 0;
for i := 0 to n - 1 do
begin
K := pos(':',Memo1.Lines.Strings[i]);
A1[i] := StrToInt(Trim(copy(Memo1.lines.strings[i], 0, k - 1)));
caption := Caption + ' ' + inttostr(A1[i]);
end;
for j := 1 to n - 1 do
for i := 1 to n - j do
if A1[i] > A1[i + 1] then
begin
Temp := A1[i];
A1[i] := A1[i + 1];
A1[i + 1] := Temp;
end; for m := 0 to n -1 do
Edit1.text := Edit1.text + ' ' + inttostr(A1[m]){ for i := 0 to n-1 do
begin
k := pos(Trim(IntToStr(A1[i])),Memo1.Lines.Strings[i]);
if (k > 0) then
for j := 0 to n - 1 do
begin
m := pos(':',Memo1.Lines.Strings[j]);
s := Trim(copy(Memo1.lines.strings[j], 0, m - 1));
if IntToStr(A1[i]) = s then
begin
Memo2.Lines.Add(Memo1.Lines.Strings[j]);
exit;
end;
end; end;}
end;
Memo1中的内容为“ 数字:内容………… ”
var
i, k, j, n, m, Temp: integer;
A1: array of integer;begin
n := Memo1.Lines.Count;
setlength(A1,n);
Temp := 0;
for i := 0 to n - 1 do
begin
K := pos(':',Memo1.Lines.Strings[i]);
A1[i] := StrToInt(Trim(copy(Memo1.lines.strings[i], 0, k - 1)));
caption := Caption + ' ' + inttostr(A1[i]);
end;
for j := 1 to n - 1 do
for i := 1 to n - j do
if A1[i] > A1[i + 1] then
begin
Temp := A1[i];
A1[i] := A1[i + 1];
A1[i + 1] := Temp;
end; for m := 0 to n -1 do
Edit1.text := Edit1.text + ' ' + inttostr(A1[m]){ for i := 0 to n-1 do
begin
k := pos(Trim(IntToStr(A1[i])),Memo1.Lines.Strings[i]);
if (k > 0) then
for j := 0 to n - 1 do
begin
m := pos(':',Memo1.Lines.Strings[j]);
s := Trim(copy(Memo1.lines.strings[j], 0, m - 1));
if IntToStr(A1[i]) = s then
begin
Memo2.Lines.Add(Memo1.Lines.Strings[j]);
exit;
end;
end; end;}
end;
Memo1中的内容为“ 数字:内容………… ”
按顺序在edit1显示
如果memo1中有1:aaaaaa
2:bbbbbb
3:cccccc那么结果是:
edit1:123123123........
memo2:1:aaaaaa
1:aaaaaa
1:aaaaaa
........
s:string;
你可以用静态的数组,因为动态的数组在操作中可能会被memory manager 中断产生 EInvalidPointer Error,如果用静态的数组就不会出现此问题了 。
当Memo1种的数据为
23:afdadsf
45:asdfads
5:adfasf
8:adsfzxcv
10:sdafasdf然后 按Button1的结果是报一个错误:“Invalid pointer operation”在我跟踪程序的时候总是在其中的冒泡排序后数组中的最后一位数据就会变化,然后就会报错genphone_ru(改行去学VC):我的那段程序在这个地方没有错误 nnx(倪香儿):谢谢你,我想要的结果数据为:例如我在上面写的那些数据
要按照前面的数字进行从小到大的排序,然后将其中的内容写道Memo2中去pillarlu(pillarlu):谢谢你的提示,但是我没有办法确定我的用户要数据多少条数据呀,只好用动态数组了,没办法事情呀
i, k, j, n, m, Temp: integer;
A1: array of integer;begin
n := Memo1.Lines.Count;
setlength(A1,n+1);
Temp := 0;
for i := 0 to n - 1 do
begin
K := pos(':',Memo1.Lines.Strings[i]);
A1[i] := StrToInt(Trim(copy(Memo1.lines.strings[i], 0, k - 1)));
caption := Caption + ' ' + inttostr(A1[i]);
end;
for j := 1 to n - 1 do
for i := 0 to n - j do
if A1[i] > A1[i + 1] then
begin
Temp := A1[i];
A1[i] := A1[i + 1];
A1[i + 1] := Temp;
end; for m := 0 to n -1 do
Edit1.text := Edit1.text + ' ' + inttostr(A1[m]);
procedure TForm1.BB( A: array of integer; n: integer);
var
i, j, Temp: integer;
swap: 0..1;
begin
j := 1;
repeat
swap := 0;
for i := 1 to n - j do
begin
Temp := A[i];
A[i] := A[i + 1];
A[i + 1] := Temp;
swap := 1;
// Edit1.text := Edit1.text + ' ' + inttostr(A[i]);
end;
j := j + 1;
until (j = n) or (swap = 0);
end;这条来进行排序的话,就不会出现这样的错误,但是在主程序中不能排序
var
i, k, j, n, m, Temp: integer;
A1: array of integer;begin
n := Memo1.Lines.Count;
setlength(A1,n);
Temp := 0;
for i := 0 to n - 1 do
begin
K := pos(':',Memo1.Lines.Strings[i]);
if k > 0 then
begin
A1[i] := StrToInt(Trim(copy(Memo1.lines.strings[i], 0, k - 1)));
caption := Caption + ' ' + inttostr(A1[i]);
end ;
end;
for j := 0 to n - 1 do
for i := 0 to n - j do
if A1[i] > A1[i + 1] then
begin
Temp := A1[i];
A1[i] := A1[i + 1];
A1[i + 1] := Temp;
end; for m := 0 to n -1 do
Edit1.text := Edit1.text + ' ' + inttostr(A1[m]){ for i := 0 to n-1 do
begin
k := pos(Trim(IntToStr(A1[i])),Memo1.Lines.Strings[i]);
if (k > 0) then
for j := 0 to n - 1 do
begin
m := pos(':',Memo1.Lines.Strings[j]);
s := Trim(copy(Memo1.lines.strings[j], 0, m - 1));
if IntToStr(A1[i]) = s then
begin
Memo2.Lines.Add(Memo1.Lines.Strings[j]);
exit;
end;
end; end;}
end;
for j := 1 to n - 1 do
for i := 1 to n - j do
if A1[i] > A1[i + 1] then
begin
Temp := A1[i];
A1[i] := A1[i + 1];
A1[i + 1] := Temp;
end;
按你举的例子
当Memo1种的数据为
23:afdadsf
45:asdfads
5:adfasf
8:adsfzxcv
10:sdafasdf
当j为1时,n-j=5-1=4
那么当内循环到i=4时,
if A1[i] > A1[i + 1] then就成了if A1[4] > A1[5] then
但是根本就没有A1[5]
for j := 0 to n - 1 do
for i := 1 to n - 1 do
if A1[i - 1] > A1[i] then
begin
Temp := A1[i-1];
A1[i-1] := A1[i];
A1[i] := Temp;
end else
continue;哈哈,我随便写的,1000分哦!!^o^
在这里写出解决的办法:
我的那段程序就是在循环式出了问题,所以主要该的就是循环部分
A: array of integer;
for i:= high(A) downto low(a) do
for j := low(A) to high(A) - 1 do
begin
if A(j) > A(j + 1) then
begin
T := A(j);
A(j) := A(j + 1);
A(j + 1) := T;
end;
end;
好了就这样吧,休息,休息一会!在这里我再次的感谢大家的帮助,谢谢
for i := 1 to n - j do
if A1[i] > A1[i-1] then
begin
Temp := A1[i-1];
A1[i-1] := A1[i];
A1[i] := Temp;
end;从小到大: for j := 1 to n-1 do
for i := 1 to n - j do
if A1[i] < A1[i-1] then
begin
Temp := A1[i-1];
A1[i-1] := A1[i];
A1[i] := Temp;
end;结贴吧!