Delphi - как преобразовать строку в массив

Предлагаю решение с применением динамического массива.

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;


Теги:
как, преобразовать, строку, в, массив, как преобразовать строку в массив, форум программистов, компьютерный форум, киберфорум, сайберфорум, компьютеры, программирование, софт
Добавлено: 24 Февраля 2015 22:08:41 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...