Ich habe in meinem Programm eine function, welche mir einen gegebenen string sortieren soll.
z.B. : '7,3,11,5,1' --> '1,3,5,7,11'
Dazu gebe ich meiner function einen string in solch einer Form, also durch Kommas abgetrennte Zahlen. Daraufhin soll es die einzelnen Zahlen separieren und in einem Array aufteilen. Daraufhin durch meinen Such-Algorithmus die einzelnen Glieder jeweils vergleichen und in ein anderes Array in geordneter Reihenfolge kopieren. Und als Ausgabe diese einfach wieder durch Kommas getrennt als einzelnen string ausgeben.
Ich denke vom Verfahren her ist mein Code in Ordnung, jedoch bekomme ich immer den folgenden Error:
Zugriffsverletzung bei Adresse 00403EBC in Modul 'psort.exe'. Lesen von Adresse 00000004.
Hier noch einmal mein Delphi-Code:
Delphi-Quellcode:
unit msort;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 =
class(TForm)
Edit1: TEdit;
Edit2: TEdit;
procedure Edit1Change(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
function sortString(input:
string):
string;
var i, j, x: integer;
output, rest:
string;
unsorted, sorted:
array of string;
begin
rest:= input;
i:= 1;
repeat
if pos('
,', rest) <> 0
then
begin
unsorted[i]:= copy(rest, i, pos('
,', rest) - 1);
rest:= copy(rest, pos('
,', rest) + 1, length(rest));
i:= i + 1;
end;
if pos('
,', rest) = 0
then
begin
unsorted[i]:= copy(rest, 1, length(rest));
rest:= '
';
end;
until rest = '
';
for i:= 1
to length(unsorted)
do
begin
x:= i;
for j:= 1
to length(unsorted)
do
begin
if (j <> i)
and (unsorted[j] <> '
')
then
begin
if strtofloat(unsorted[x]) < strtofloat(unsorted[j])
then
begin
x:= j;
end;
end;
end;
sorted[i]:= unsorted[x];
end;
output:= sorted[1];
for i:= 2
to length(sorted)
do
begin
output:= output + '
,' + sorted[i];
end;
result:= output;
end;
{$R *.dfm}
procedure TForm1.Edit1Change(Sender: TObject);
begin
Edit2.Text:= sortString(Edit1.Text);
end;
end.
Ich hoffe mir kann jemand sagen, worin genau mein Fehler liegt, denn ich habe keine Ahnung was ich falsch gemacht haben könnte. Und schon einmal Danke im vorraus.