Sortowanie stringów w aplikacji konsolowej.

0

Witam, mam z góry wiadomą liczbę wyrazów do posortowania.

Wpisuje je pętla z read-em.

Posortować liczby potrafię, ale co zmienić, żeby posortowało coś alfabetycznie ? Szukałem w googlach i nie znalazłem rozwiązania tzn. było pare przykładów, ale najczęsciej na liczbach, a jak litery to w obiektowym delphi. Proszę o pomoc (może jakiś link albo sam fragment sortujący). Z góry dziękuję.

2

Rozwiązań jest wiele. Na przykład takie jak poniżej.

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

procedure SortArrayOfStr(var A : array of string);

  procedure QuickSort(var A : array of string; iLo, iHi : Integer);
  var
    Lo, Hi : Integer;
    Mid, T : string;
  begin
    Lo := iLo;
    Hi := iHi;
    Mid := A[(Lo + Hi) div 2];
    repeat
      while AnsiCompareStr(A[Lo], Mid) < 0 do
      begin
        Lo := Lo + 1;
      end;
      while AnsiCompareStr(A[Hi], Mid) > 0 do
      begin
        Hi := Hi - 1;
      end;
      if Lo <= Hi then
      begin
        T := A[Lo];
        A[Lo] := A[Hi];
        A[Hi] := T;
        Inc(Lo);
        Dec(Hi);
      end;
    until Lo > Hi;
    if Hi > iLo then
    begin
      QuickSort(A, iLo, Hi);
    end;
    if Lo < iHi then
    begin
      QuickSort(A, Lo, iHi);
    end;
  end;

begin
  QuickSort(A, Low(A), High(A));
end;

var
  I : integer;
  Arr : array of string;
begin
  SetLength(Arr, 3);
  for I := Low(Arr) to Length(Arr) - 1 do
  begin
    Write('Podaj wyraz ', I + 1, ' z ', Length(Arr), ': ');
    Readln(Arr[I]);
  end;
  SortArrayOfStr(Arr);
  for I := Low(Arr) to Length(Arr) - 1 do
  begin
    Writeln(Arr[I]);
  end;
  Readln;
end.
0

Mógłbyś też parę słów dodać jak rozumieć
AnsiCompareStr - to jest przypisanie a:=1 , b:=2 ... z:=24 ?

myślałem właśnie żeby poszczególne 1,2,3 odpowiadały chr(65),... znakowi ascii, ale właśnie ta metoda zawarta jest w tej ?funkcji?

Resztę rozumiem raczej :) , ale magiczne AnsiCompareStr ...

1 użytkowników online, w tym zalogowanych: 0, gości: 1