![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Избавление от нулей в строчке???
CCCatch © (2002-08-21 12:40:00)Как удалить все имеющиеся нули из Edit1??
Alx2 (2002-08-21 13:49:00) [21]>McSimm © (21.08.02 13:32)
В S1 - строка без нулей.
Var S, S1 : String;
k,l : integer;
begin
S := "000sdfdss00000001000000фыаф001100fgh000010";
setLength(S1,Length(S));
l := 0;
for k := 1 to Length(S) do
if S[k]<>"0" then
begin
inc(l);
S1[l] := S[k]
end;
SetLength(S1,l);
ShowMessage(S1);
end;
Alx2 (2002-08-21 13:39:00) [22]>McSimm © (21.08.02 13:32)
>Ну, считать rep movsb за цикл это несколько жестко, хотя
>принципиально ты прав.
Самый настоящий цикл. И не намного быстрее цикла на базе явных условных переходов, а на некоторых процессорах даже и медленнее.
McSimm (2002-08-21 13:32:00) [23]Alx2 © (21.08.02 13:16)
а третьим параметром в move что идет?!
А, в этом смысле :)
Ну, считать rep movsbза цикл это несколько жестко, хотя принципиально ты прав.
Однако, меня интересует твой алгоритм. Если в цикле
if S1[i] <> "0" then S2 := S2 + S1[i],
то IMHO это намного медленнее
Alx2 (2002-08-21 13:16:00) [24]>McSimm © (21.08.02 13:13)
>не будет. Обычный move() будет.
Блин, а третьим параметром в move что идет?!
McSimm (2002-08-21 13:13:00) [25]>Alx2 © (21.08.02 13:03)
Внутри Delete тоже будет все перетаскиваться за O(n)
не будет. Обычный move() будет.
>Jeer © (21.08.02 13:01)
чуть подправлю:
S := StringReplace(S, "0", "", [rfReplaceAll]);
Alx2 (2002-08-21 13:03:00) [26]>Anatoly Podgoretsky © (21.08.02 13:02)
Внутри Delete тоже будет все перетаскиваться за O(n). Отсюда квадратичность.
Anatoly Podgoretsky (2002-08-21 13:02:00) [27]Alx2 © (21.08.02 12:51)
сложность порядка O(n^2) вместо O(n).
Это почему же, я предлагаю сделать это за один проход
Jeer (2002-08-21 13:01:00) [28]S := StringReplace(S, "0", "rfReplaceAll" );
Alx2 (2002-08-21 13:00:00) [29]>Dmitriy Polskoy © (21.08.02 12:53)
Очень медленно будет работать:(
Хотя может я и зря: нужна ли здесь скорость? :)
Dmitriy Polskoy (2002-08-21 12:53:00) [30]
procedure TForm1.Button1Click(Sender: TObject);
var
S: string;
begin
S := "000123.5";
while Pos("0", S) > 0 do
delete(s,Pos("0", S),1);
ShowMessage(s);
end;
Alx2 (2002-08-21 12:51:00) [31]>Anatoly Podgoretsky © (21.08.02 12:49)
сложность порядка O(n^2) вместо O(n).
Anatoly Podgoretsky (2002-08-21 12:49:00) [32]Процедура Delete в цикле
CCCatch (2002-08-21 12:46:00) [33]Причём удалить нужно только нули, а всё остальное оставить