Главная страница
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.018 c
3-91153
Askik
2003-04-09 11:59
2003.04.28
Как отлавливать в чем ошибка неудачного подключения к серверу?


14-91467
Переяслов Григорий
2003-04-09 10:26
2003.04.28
текстовый файл или ini-файл


6-91439
freeek10
2003-03-04 11:44
2003.04.28
VCL в консольно приложении


4-91595
Mantic0re
2003-03-03 06:56
2003.04.28
Как раскрасить scrollbar и combobox?


6-91443
RUS1
2003-03-04 09:22
2003.04.28
толи Server.Socket глючит толи у меня лыжы не едут