Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.03.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.007 c
7-6261
Death2
2003-12-14 08:04
2004.03.03
файлы


11-6001
Angel_vv
2003-06-17 21:04
2004.03.03
Help!!! Как организовать сетевой досту к бд (dbf)?


1-6056
DmitryNekl
2004-02-18 21:39
2004.03.03
Массив элементов TStringList


11-6002
chum
2003-06-17 10:59
2004.03.03
Не найден файл exptintf.dcu


14-6253
Saturn
2004-02-10 15:31
2004.03.03
Субтитры к фильмам.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский