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

Вниз

Удаление пробела из строки   Найти похожие ветки 

 
smolin   (2004-02-18 14:21) [0]

Подскажите пожалуста какой функцией надо воспользоваться чтобы удалить пробелы из строки.
Например есть строка "aaa bbb ccc", а надо получить "aaabbbccc"


 
MBo ©   (2004-02-18 14:24) [1]

одной строчкой, но медленно - StringReplace

четыре-пять строчек - цикл for со сдвигом очередного символа на количество найденных пробелов.


 
Amoeba ©   (2004-02-18 14:30) [2]

Можно использовать готовую оптимизированную ф-ию из бесплатной отечественной библиотеки QStrings

{ Q_DeleteText удаляет из строки S все вхождения подстроки SubStrToDel. Поиск
подстроки ведется без учета регистра символов. Функция возвращает количество
найденных (и удаленных) фрагментов. }

function Q_DeleteText(var S: string; const SubStrToDel: string): Integer;


 
ALEIIIKA ©   (2004-02-18 14:36) [3]

Удаляет все пробелы в строке S

while Pos(s," ") > 0 do
Delete(s,Pos(s," "),1);


 
Radionov Alexey ©   (2004-02-18 14:54) [4]

>MBo © (18.02.04 14:24)
де жа вю [3]? :))


 
Loneron ©   (2004-02-18 15:01) [5]

Поддерживаю ALEIIIKA © (18.02.04 14:36)
Только незачем Pos 2 раза вызывать


 
Radionov Alexey ©   (2004-02-18 15:07) [6]

>Loneron © (18.02.04 15:01) [5]
Позвольте узнать почему поддерживаете?


 
Loneron ©   (2004-02-18 15:11) [7]

>Radionov Alexey © (18.02.04 15:07)
поддерживаю, потому что сам бы написал этом духе. Позвольте узнать, а вам чем не нравится?


 
Radionov Alexey ©   (2004-02-18 15:17) [8]

>Loneron © (18.02.04 15:11) [7]
Просто потому, что время работы при такой реализации будет пропорционально квадрату длины строки.

(Pos каждый раз начинает просмотр с начала строки - получаем неявный вложенный цикл, когда достаточно одного всего цикла)


 
Loneron ©   (2004-02-18 15:23) [9]

for i := Length(S) - 1 downto 0 do
if S[i] = " " then Delete(S, i, 1);

на этом закончим? :)


 
Radionov Alexey ©   (2004-02-18 15:24) [10]

>Loneron © (18.02.04 15:23) [9]
Не-а :)))
Все равно есть квадратичная зависимость (Delete вызывает ее)
;-)


 
Loneron ©   (2004-02-18 15:29) [11]

Ладно, уговорил
Buf := "";
for i := 0 to Length(S) - 1 do
if S[i] <> " " then Buf := Buf + S[i];
S := Buf;

ну так то хоть пойдет? :)


 
Radionov Alexey ©   (2004-02-18 15:34) [12]

>Loneron © (18.02.04 15:29) [11]
Конкатенация строк - думаешь, легче будет?

Я в таких случаях завожу два индекса (вернее, две индексных переменных) для одной строки. Один для чтения, другой для записи. Первый за каждый шаг увеличивается на 1. Второй увеличивается, если только попадается "правильный" символ. Таким образом все творится пределах одной строки и за один проход. В конце только нужно подкорректировать длину строки по второму индексу.


 
ALEIIIKA ©   (2004-02-18 15:35) [13]

Главно довести идею, оптимизация потом пойдет исходя из найденного текущего решения. Я и не говорил, что это оптимальный вариант.


 
Loneron ©   (2004-02-18 15:46) [14]

>Radionov Alexey © (18.02.04 15:34)
Вах, шайтан! :))


 
Fay ©   (2004-02-18 15:54) [15]

2Loneron © (18.02.04 15:46) [14]
попробуйте проделать это со строкой длиной 100000.


 
Amoeba ©   (2004-02-18 15:57) [16]


> со строкой длиной 100000

Не дай Бог, чтобы такая строка ночью приснилась...


 
Romkin ©   (2004-02-18 16:06) [17]

Так пойдет?

function DeleteAllChars(const S: string; CharToDelete: char): string;
var
i, len: integer;
begin
SetLength(Result, length(S));
len := 0;
for i := 1 to length(S) do
if S[i] <> CharToDelete then
begin
inc(len);
Result[len] := S[i];
end;
SetLength(Result, len);
end;


 
dr Tr0jan ©   (2004-02-19 10:16) [18]

Смотри http://delphimaster.net/view/1-1077158471/



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

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

Наверх




Память: 0.5 MB
Время: 0.02 c
4-6268
bers01
2003-12-26 13:27
2004.03.03
Функция DestroyWindow


14-6214
*BES*
2004-02-10 13:23
2004.03.03
Читаем txt файл из exe!!!


3-5958
alex-ran
2004-02-05 15:11
2004.03.03
Запросы на вставку и Исключения


3-5965
Zilog
2004-02-05 16:23
2004.03.03
Ф1 грит, что TGridDrawState живет в модуле Classes.


1-6118
Opryshok
2004-02-19 18:36
2004.03.03
IDispatch реализация без TypeLibrary. Возможно?