Форум: "Основная";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];
ВнизЕсть ли функция удаляющая все пробелы из строки Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c