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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.044 c
14-1105004976
syte_ser78
2005-01-06 12:49
2005.01.23
try except


6-1099325794
able
2004-11-01 19:16
2005.01.23
Большая задержка...


1-1105005604
AndreySoft
2005-01-06 13:00
2005.01.23
InputQuery и PasswordChar


4-1102331451
Makuha
2004-12-06 14:10
2005.01.23
Работа с файлами с помощью ф-ций _lopen и _lread.


3-1103659183
Igor_P
2004-12-21 22:59
2005.01.23
SQL-запрос к таблице