Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Удаления пробелов в строке. [D7]


aka ©   (2012-06-27 11:09:00) 

Как будет быстрее:

1)

procedure TForm1.Button1Click(Sender: TObject);
var
 str, rez : String;
 i,k: Integer;
begin
 k := 0;
 str := 'q w er t  y   try'+#13+'as df'+#13+'z x c v';
 SetLength(rez, Length(str));

 for i := 1 to Length(str) do
 if ((str[i] in ['a'..'z', 'A'..'Z', '0'..'9'])) then
   rez[i-k] := str[i]
 else
   Inc(k);

 SetLength(rez, Length(rez)-k);
end;


или

2)


procedure TForm1.Button1Click(Sender: TObject);
var
 str, rez : String;
 i,k: Integer;
begin
 str := 'q w er t  y   try'+#13+'as df'+#13+'z x c v';

 for i := 1 to Length(str) do
 if ((str[i] in ['a'..'z', 'A'..'Z', '0'..'9'])) then
   rez := rez + str[i];

end;


Омлет   (2012-06-27 12:42:00) [1]

А можно вообще не выделять доп. память, если есть возможность модифицировать исходную.


Омлет   (2012-06-27 12:36:00) [2]

> aka   (27.06.12 11:09)

К гадалке не ходи - ясно, что с предварительным выделением памяти быстрее.
А ещё можно "пробелы" вырезать грубо, вместе со всеми служебными символами (< #33):

function StripSpasesAndSpecChars(const s: AnsiString): AnsiString;
var
 i, n: integer;
begin
 n := 0;
 SetLength(Result, Length(s));
 for i := 1 to Length(s) do
 begin
   if PByte(@s[i])^ > 32 then
   begin
     inc(n);
     PByte(@Result[n])^ := PByte(@s[i])^;
   end;
 end;
 SetLength(Result, n);
end;


Anatoly Podgoretsky   (2012-06-27 11:54:00) [3]

> aka  (27.06.2012 11:09:00)  [0]

И обе функции работают не так как заявлено.


Anatoly Podgoretsky   (2012-06-27 11:53:00) [4]

> aka  (27.06.2012 11:09:00)  [0]

Ты просишь нам измерить


AV   (2012-06-27 11:24:00) [5]

т.е. StringReplace

uses StrUtils;

procedure TForm1.Button1Click(Sender: TObject);
var
 str: string;
begin
 str := 'q w er t  y   try'+#13+'as df'+#13+'z x c v';
 ShowMessage( StringReplace(str,' ','',[rfReplaceAll]) );


AV   (2012-06-27 11:20:00) [6]

как быстрее - можно замерить самому
а понятнее будет юзать StrUtils.ReplaceString


Наверх

Титульная страница Поиск, карта сайта Написать письмо