在Edit1中交换元素

时间:2016-04-06 13:11:34

标签: delphi pascal lazarus

我有Edit1,您可以在其中键入2 20 10 -3等数字,当您点击Button1时,它会显示最大和最小数字max = 20 min = -3。 当我拿出数字时,我试图将minmax数字交换为Edit1 2 -3 10 20 Edit4.Text:= (inttostr(min)+' '+ inttostr(max)); 我按照我的方式尝试了但是其他输入的数字更改了地方。 我尝试了很多方法:

maxnumb := Edit4

Edit4.Text  := StringReplace(maxnumb, inttostr(max), inttostr(min),
                          [rfReplaceAll, rfIgnoreCase]); 

Edit1.Text  := StringReplace(maxnumb, inttostr(min), inttostr(max),
                          [rfReplaceAll, rfIgnoreCase]); 

但它会覆盖其他数字。

然后我尝试使用

Button1

但它只转换了第一个数字,当我再次点击procedure TForm1.Button1Click(Sender: TObject); var oSL: TStringlist; s, ss: string; a: array [1 .. 15] of integer; i, j, k, p, code: integer; max, min: integer; before, after: string; begin s := Edit1.Text; s := concat(s, #32); i := 0; while Length(s) > 0 do begin i := i + 1; p := pos(#32, s); ss := copy(s, 1, p - 1); Val(ss, k, code); a[i] := k; delete(s, 1, p); end; // Max max := a[1]; For j := 1 to i do if max < a[j] then max := a[j]; // Min min := a[1]; For j := 1 to i do if min > a[j] then min := a[j]; // Put out Max/Min Edit3.Text := IntToStr(max); Edit2.Text := IntToStr(min); end; 时,它会转换第二个数字。

没有尝试交换的代码:

var links = window.frames[1].document.getElementsByTagName("a");

1 个答案:

答案 0 :(得分:1)

uses
  Types, StrUtils;

function Arrange(const AEditFrom, AEditTo: TEdit): Boolean;
var
  _StrArr: TStringDynArray;
  i: integer;
  _IntArr: array of integer;
  _IntValue: integer;
  _Min: integer;
  _Max: integer;
begin
  Result := False;

  if not Assigned(AEditFrom) then
    Exit;
  if not Assigned(AEditTo) then
    Exit;

  _StrArr := SplitString(AEditFrom.Text, ' ');
  SetLength(_IntArr, Length(_StrArr));

  for i := 0 to Length(_StrArr) - 1 do
  begin
    if not TryStrToInt(_StrArr[i], _IntValue) then
      Exit;

    _IntArr[i] := _IntValue;
  end;

  AEditTo.Clear;
  _Min := _IntArr[0];
  _Max := _IntArr[0];
  for i := 0 to Length(_IntArr) - 1 do
  begin
    if _IntArr[i] > _Max then
      _Max := _IntArr[i];

    if _IntArr[i] < _Min then
      _Min := _IntArr[i];
  end;

  AEditTo.Text := StringReplace(AEditFrom.Text, ' ' + IntToStr(_Min),
    '...' + IntToStr(_Max), [rfReplaceAll, rfIgnoreCase]);

  AEditTo.Text := StringReplace(AEditTo.Text, ' ' + IntToStr(_Max),
    ' ' + IntToStr(_Min), [rfReplaceAll, rfIgnoreCase]);

  AEditTo.Text := StringReplace(AEditTo.Text, '...', ' ',
    [rfReplaceAll, rfIgnoreCase]);

  Result := True;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  if not Arrange(Edit1, Edit2) then
    ShowMessage('Something went wrong. List contains not a integer?');
end;

测试: 2 20 10 -3 ,结果: 2 -3 10 20