Предлагаю решение с применением динамического массива.
procedure TForm1.Button1Click(Sender: TObject);
const
//Множество цифр.
D = ['0'..'9'];
//Величина приращения длины динамического массива.
Capacity = 10;
var
S : String;
Arr : array of Integer;
i, j, Pos1, Len : Integer;
begin
//Исходный текст.
S := Memo1.Text;
Len := Length(S);
Pos1 := 0;
j := 0;
for i := 1 to Len do begin
//Пропускаем символы, которые не являются цифрами.
if not (S[i] in D) then Continue;
//Отслеживаем начало числа.
if (i = 1) or ( not (S[i - 1] in D) ) then Pos1 := i;
//Отслеживаем конец числа.
if (i = Len) or ( not (S[i + 1] in D) ) then begin
//Если требуется, увеличиваем длину динамического массива.
if j = Length(Arr) then SetLength(Arr, j + Capacity);
//Добавляем очередное найденное число в массив.
Arr[j] := StrToInt( Copy(S, Pos1, i - Pos1 + 1) );
//Индекс следующего элемента массива.
Inc(j);
end;
end;
//Корректируем длину массива в соответствие с количеством
//добавленных в него элементов.
if j < Length(Arr) then SetLength(Arr, j);
//Показываем результат.
Memo2.Clear;
Memo2.Lines.Add('Числа, добавленные в массив:');
for i := 0 to High(Arr) do begin
Memo2.Lines.Add( IntToStr(Arr[i]) );
end;
//Удаляем динамический массив из памяти.
//Это надо делать в явном виде только в случае, когда
//элементы динамического массива принадлежат динамическим
//типам (длинные строки, другие динамические массивы, варианты).
//В нашем случае это делать необязательно, т. к. числа не являются
//динамическими типами.
Finalize(Arr);
end;
end;
Решение 2
procedure TForm1.Button1Click(Sender: TObject);
var mas:array of integer;
i,q:integer; str,s:string;
begin
q:=0;
str:=edit1.text;
SetLength(mas,ceil(length(edit1.text)/3));
for i:=1 to length(edit1.text)+1 do begin
if (str[i]<>' ')and(str[i]<>#0) then
s:=s+str[i] else begin
mas[q]:=strtoint(s);
s:='';
inc(q);
end;
end;
И ещё в виде отдельной функции:
type
TArr = array of Integer;
function ExtractNums(const aStr : String) : TArr;
const
//Множество цифр.
D = ['0'..'9'];
//Величина приращения длины динамического массива.
Capacity = 10;
var
i, j, Pos1, Len : Integer;
begin
Finalize(Result);
Len := Length(aStr);
Pos1 := 0;
j := 0;
for i := 1 to Len do begin
//Пропускаем символы, которые не являются цифрами.
if not (aStr[i] in D) then Continue;
//Отслеживаем начало числа.
if (i = 1) or ( not (aStr[i - 1] in D) ) then Pos1 := i;
//Отслеживаем конец числа.
if (i = Len) or ( not (aStr[i + 1] in D) ) then begin
//Если требуется, увеличиваем длину динамического массива.
if j = Length(Result) then SetLength(Result, j + Capacity);
//Добавляем очередное найденное число в массив.
Result[j] := StrToInt( Copy(aStr, Pos1, i - Pos1 + 1) );
//Индекс следующего элемента массива.
Inc(j);
end;
end;
//Корректируем длину массива в соответствие с количеством
//добавленных в него элементов.
if j < Length(Result) then SetLength(Result, j);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Arr : TArr;
i : Integer;
begin
Arr := ExtractNums(Memo1.Text);
//Показываем результат.
Memo2.Clear;
Memo2.Lines.Add('Числа, добавленные в массив:');
for i := 0 to High(Arr) do begin
Memo2.Lines.Add( IntToStr(Arr[i]) );
end;
//Удаляем динамический массив из памяти.
//Это надо делать в явном виде только в случае, когда
//элементы динамического массива принадлежат динамическим
//типам (длинные строки, другие динамические массивы, варианты).
//В нашем случае это делать необязательно, т. к. числа не являются
//динамическими типами.
Finalize(Arr);
end;