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

Вниз

Быстрый способ вырезать строку   Найти похожие ветки 

 
Piter ©   (2005-01-03 18:25) [0]

Нужен наиболее быстрый способ вырезать одну строку из другой. Что-то типа:

function CuteString(BeginSeparator: string; EndSeparator: string; s: string): string

То есть, функции передается сама строка и два разделителся. И функция должна вернуть строку между двумя разделителями.
Пример:

CuteString("w", "t", "qwerty") = "er"

CuteString("qw", "ty", "qwerty") = "er"

CuteString("", "rt", "qwerty") = "qwe"

CuteString("qw", "", "qwerty") = "erty"

CuteString("a", "b", "baab") = "a"

CuteString("b", "a", "baab") = ""


 
begin...end ©   (2005-01-03 18:26) [1]

Предлагаю использовать PosEx и Copy


 
Чеширский_Кот ©   (2005-01-03 18:45) [2]

тогда уж правильнее - CutString

CuteString - это из другой оперы


 
Piter ©   (2005-01-03 18:48) [3]

begin...end ©   (03.01.05 18:26) [1]
Предлагаю использовать PosEx и Copy


например?


 
AlterEgo of WondeRu ©   (2005-01-03 18:48) [4]

может не нада на праздники программировать!!!!!????????


 
Piter ©   (2005-01-03 18:48) [5]

begin...end ©   (03.01.05 18:26) [1]

хотя в общем понятно что ты имеешь в виду... но имхо, это далеко не самый быстрый способ... особенно я не уверен в скорости PosEx...


 
begin...end ©   (2005-01-03 18:57) [6]

> [3] Piter ©   (03.01.05 18:48)

function CuteString(BeginSeparator: String; EndSeparator: String; S: String): String;
var
 P1, P2, L1, L2: Integer;
begin
 L1 := Length(BeginSeparator);
 L2 := Length(EndSeparator);
 if (L1 > 0) and (L2 > 0) then
 begin
   P1 := Pos(BeginSeparator, S);
   if P1 > 0 then
   begin
     Inc(L1, P1);
     P2 := PosEx(EndSeparator, S, L1);
     if P2 > 0 then
       Result := Copy(S, L1, P2 - L1)
   end
 end
end.


> [5] Piter ©   (03.01.05 18:48)

Эффективность PosEx и вообще любой функции поиска строки зависит от конкретной входной строки. Например, есть алгоритм Боуэра и Мура, но он иногда бывает довольно медленным, а иногда даёт огромный прирост в производительности.

"Практика - критерий истины" (© Игорь Шевченко)

Можно подумать и сделать что-то наподобие конечного автомата... Но, думаю, будет тоже не быстро...


 
Чеширский_Кот ©   (2005-01-03 19:06) [7]

CuteString, гы


 
Cobalt ©   (2005-01-04 00:59) [8]

:)
Ох, Piter ©, you are so cute ;)
^__^


 
Юрий Зотов ©   (2005-01-04 01:36) [9]

Блин, бывает же приятно почитать...
Не шучу. Правда. Имхо, конечно.

> Автору вопроса

Истина - в [4].
Решение - в исходниках QString.


 
KilkennyCat ©   (2005-01-04 02:14) [10]

хе... а я бы сделал в repeat until попиксельно сравнивая...


 
GuAV ©   (2005-01-04 02:24) [11]

KilkennyCat ©   (04.01.05 2:14) [10]
А шрифт какой ? WebDings ?


 
DeadMeat ©   (2005-01-04 03:13) [12]


> Чеширский_Кот ©

Эка тебя приперло... ;)

СимташинаяСтрочка... Гыгы...

---
...Death Is Only The Begining...


 
KilkennyCat ©   (2005-01-04 03:17) [13]

при чем здесь шрифт?
Repeat
 pusk := string[i] = start;
 inc(i);
 if pusk then result := result + string[i];
until (i = length(string)) or (string[i+1] = stop);

примерно так. Правда, наверное ошибочка выскочит в проверке условия цикла, когда i станет = length(string), string[i+1] наверное, глюкнет.


 
DeadMeat ©   (2005-01-04 03:34) [14]


> хе... а я бы сделал в repeat until попиксельно сравнивая...

Походу спать уже пора... По крайней мере я пошел...

---
...Death Is Only The Begining...


 
KilkennyCat ©   (2005-01-04 03:37) [15]


> DeadMeat ©   (04.01.05 03:34) [14]

ну, в данном случае, один символ строки все равно что один пиксел картинки - и то и другое элемент массива. Просто посимвольно звучит не так забавно, как попиксельно. :)


 
Piter ©   (2005-01-04 22:00) [16]

Юрий Зотов ©   (04.01.05 1:36) [9]
Блин, бывает же приятно почитать...
Не шучу. Правда. Имхо, конечно.


Юрий, если честно - я не понял о чем вы...

Юрий Зотов ©   (04.01.05 1:36) [9]
Решение - в исходниках QString


Лень матушка :)))
Пойду гуглить... или не пойду...


 
Piter ©   (2005-01-04 22:00) [17]

Юрий Зотов ©   (04.01.05 1:36) [9]
Блин, бывает же приятно почитать...
Не шучу. Правда. Имхо, конечно.


Юрий, если честно - я не понял о чем вы...

Юрий Зотов ©   (04.01.05 1:36) [9]
Решение - в исходниках QString


Лень матушка :)))
Пойду гуглить... или не пойду...


 
250   (2005-01-04 23:30) [18]

>Лень матушка :)))
Все это отлично реализовано в функциях модуля QStrings.pas
а взять его можно здесь:

http://www.dbwork.kuban.ru/download/qstrings.zip



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

Форум: "Потрепаться";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.038 c
1-1105456604
sever
2005-01-11 18:16
2005.01.23
Вопрос по созданию классов


1-1105526740
Ega23
2005-01-12 13:45
2005.01.23
Формула инверсия цвета


3-1103521649
WolandUSSR
2004-12-20 08:47
2005.01.23
Вставка BLOB поля в таблицу MySQL


1-1105449990
Qtintf
2005-01-11 16:26
2005.01.23
Qtintf.dll


1-1104701792
iskatel
2005-01-03 00:36
2005.01.23
тома для восстановления





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский