![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаления пробелов в строке. [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