Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.28;
Скачать: CL | DM;

Вниз

Есть ли функция удаляющая все пробелы из строки   Найти похожие ветки 

 
OlegM ©   (2003-04-17 09:27) [0]

Привет всем!
Но не только начальные и конечные как Trim но и если есть по середине. Если есть подскажите.


 
Song ©   (2003-04-17 09:36) [1]

Pos().. Delete() ..


 
MBo ©   (2003-04-17 09:36) [2]

StringReplace можно использовать,но медленно при больших объемах.
В этом случае лучше самому написать


 
OlegM ©   (2003-04-17 09:37) [3]

Жаль.


 
MBo ©   (2003-04-17 09:38) [4]

Что жаль-то?????


 
Fiend ©   (2003-04-17 09:43) [5]

То MBo:
Думаю что существенно быстрее чем StringReplace не получится.

То OlegM:
а действительно, что жаль то? самому трудно написать чтоли?


 
OlegM ©   (2003-04-17 09:44) [6]

Это было насчет Pos и Delete


 
MBo ©   (2003-04-17 09:56) [7]

>Fiend
Получится. Например, простой цикл с переписыванием назад символов, если встречается пробел.


 
tv ©   (2003-04-17 10:14) [8]

Что-то типа этого
function DeleteSpaces(s: string): string;
begin
while pos(" " ,s) <> 0 do
Delete(s,(pos(" " ,s)),1);
result:=s;
end;


 
Radionov Alexey ©   (2003-04-17 11:23) [9]

>tv © (17.04.03 10:14)
И вместо количества операций пропорционального Length(S) получаем Length(S)^2 - квадратичная сложность на линейной задаче.


 
Sha ©   (2003-04-17 11:25) [10]

Тогда уж лучше типа этого

p: pchar;
ch: char;
i: integer;
---
p:=pointer(s);
for i:=1 to Length(s) do begin;
ch:=s[i];
if ch<>" " then begin;
p^:=ch; inc(p);
end;
end;
SetLength(s,p-pointer(s));


 
Radionov Alexey ©   (2003-04-17 11:25) [11]

Даже кубичная. О как! :))


 
Sha ©   (2003-04-17 11:31) [12]

Sha © (17.04.03 11:25)
забыл поставить в самом начале UniqueString(s);


 
MBo ©   (2003-04-17 11:49) [13]

i,p:integer;

for i:=1 to length(s) do
if s[i]<>" " then
s[i-p]:=s[i]
else
inc(p);
SetLength(s,Length(s)-p);


 
MBo ©   (2003-04-17 11:51) [14]

перед началом
p:=0;


 
Radionov Alexey ©   (2003-04-17 11:56) [15]

Кину и я кирпич

p := 0;
for k := 1 to Length(S) do
if S[k]<>" " then
begin
inc(p);
S[p] := S[k];
end;
Setlength(S,p);




 
REA ©   (2003-04-17 12:11) [16]

Почему функции работы со строками вызывают флейм уже который раз? Наверно они плохие в Delphi. Ну возьмите более другие и перестаньте изобретать велосипеды!


 
Sha ©   (2003-04-17 15:49) [17]

2MBo © (17.04.03 11:49)
2Radionov Alexey © (17.04.03 11:56)

REA © (17.04.03 12:11) отчасти прав :(
Дело в том, что при каждом присваивании вида s[i]:=xxx строка s проверяется на уникальность, поэтому лучше использовать pchar.


 
MBo ©   (2003-04-17 16:12) [18]

>s проверяется на уникальность
И действительно ;)
раньше не обращал внимания.
если кому интересно, вот timing:

Stringreplace: 2800
Pos-Delete(код ниже): 500
MBo/R.A. : 120
Sha: 105


i:=pos(" ",s);
while i>0 do begin
Delete(s,i,1);
i:=pos(" ",s);
end;


 
Radionov Alexey ©   (2003-04-17 16:24) [19]

>Sha © (17.04.03 15:49)
Блин, верно :(



Страницы: 1 вся ветка

Текущий архив: 2003.04.28;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.021 c
6-91433
Serhij H.
2003-03-03 12:50
2003.04.28
Delete Cookie&Cache


1-91345
Officeman
2003-04-15 17:55
2003.04.28
про Office2000 - Excel


1-91329
Neox
2003-04-14 16:03
2003.04.28
динамический массив


1-91243
62mkv
2003-04-10 09:15
2003.04.28
Поделитесь опытом создания компонента (TCustomDbGrid)


1-91282
Дмитрий
2003-04-17 10:31
2003.04.28
Определить кол-во запущенных экземпляров другой программы...