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

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

Избавление от нулей в строчке???


Страницы:   1 2

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]

Причём удалить нужно только нули, а всё остальное оставить


Страницы:   1 2

Наверх

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