Главная страница
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-91192
AleksandrKu
2003-04-09 17:06
2003.04.28
Query дублирует записи как от этого избавиться


7-91573
coolcat
2003-03-08 23:08
2003.04.28
Блокировка лотка CD-ROM


3-91217
Evgen
2003-04-10 15:54
2003.04.28
Работа с датами


3-91157
alex _bredin
2003-04-09 12:20
2003.04.28
Поиск в DBLookupComboBox


14-91550
Michael
2003-04-11 17:53
2003.04.28
Как переветсти на руский язык