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中的内容为“ 数字:内容…………  ”

解决方案 »

  1.   

    A1[i] := StrToInt(Trim(copy(Memo1.lines.strings[i], 1, k - 1)));
      

  2.   

    把Memo1中的“ 数字:内容…………  ”数字取出来了
    按顺序在edit1显示
      

  3.   

    测试结果:
    如果memo1中有1:aaaaaa
                 2:bbbbbb
                 3:cccccc那么结果是:
    edit1:123123123........
    memo2:1:aaaaaa
          1:aaaaaa
          1:aaaaaa
          ........
      

  4.   

    另外,帮你添了一个变量声明:
    s:string;
      

  5.   

    A1: array [0..12] of  integer;
    你可以用静态的数组,因为动态的数组在操作中可能会被memory manager 中断产生 EInvalidPointer Error,如果用静态的数组就不会出现此问题了 。
      

  6.   

    天呀,我真的没有想到会有这么多人关心我,我太感动了,55555555好了,由于问题提得比较简单,我在细说一下吧
    当Memo1种的数据为
    23:afdadsf
    45:asdfads
    5:adfasf
    8:adsfzxcv
    10:sdafasdf然后 按Button1的结果是报一个错误:“Invalid pointer operation”在我跟踪程序的时候总是在其中的冒泡排序后数组中的最后一位数据就会变化,然后就会报错genphone_ru(改行去学VC):我的那段程序在这个地方没有错误 nnx(倪香儿):谢谢你,我想要的结果数据为:例如我在上面写的那些数据
    要按照前面的数字进行从小到大的排序,然后将其中的内容写道Memo2中去pillarlu(pillarlu):谢谢你的提示,但是我没有办法确定我的用户要数据多少条数据呀,只好用动态数组了,没办法事情呀
      

  7.   

    flytiger1977(武松!你敢来?^_^) : 你可不可以帮我来改一下呢?按照我的要求,分有的是!!!
      

  8.   

    var
      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]);
      

  9.   

    diruser(年年有大运!): 对不起你的解答也不行,我试过了如果用
    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;这条来进行排序的话,就不会出现这样的错误,但是在主程序中不能排序
      

  10.   

    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]);
        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;
      

  11.   

    kuangning(郎之间) :我要问你一句,你在计算机上试过了吗?多来几遍看看呀,大家没准在什么时候会碰到这种问题,为什么不认真试试呢?只要问题解决1000分绝对没有问题,你要5000我都给(我只有5000多了)
      

  12.   

    你的循环写错了
      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]
      

  13.   

    把那个循环改为如下:
      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^
      

  14.   

    zwjchina(蒲石):对不起,我试过了,不行的,是的,是不报错了但是里面的结果就变了呀,我真的不知道你有没有试过,但是我真得很感谢你的
      

  15.   

    好了,我的问题解决了,但是不是在这里,但我会给大家分的,过年了嘛,大家都该高兴
    在这里写出解决的办法:
    我的那段程序就是在循环式出了问题,所以主要该的就是循环部分
    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;
    好了就这样吧,休息,休息一会!在这里我再次的感谢大家的帮助,谢谢
      

  16.   

    排序是吧?其实单步骤跟踪很容易解决,当然你的思路按照程序执行的顺序模拟执行一遍也可以啊!^_^从大到小:  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;从小到大:  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;结贴吧!
      

  17.   

    ehom(?!)  : 真得不好意思,在你写着帖子的时候我已经解决了,我之所以没有结贴是想让大家都知道大家在用冒泡进行排序的时候不要犯我同样的错误呀,但真得谢谢你