Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как заменить в строке S все вхождения..... ---------------- 
:(
    Опции темы
Frikazoid
Дата 8.1.2003, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 29.3.2002

Репутация: 1
Всего: 2



Привет Всем!
У меня возникла одна проблема.
Мне нужно заменить в строке S все вхождения строки S1 на строку S2
К примеру так replace('abcddddabcdmmmmabcd','abcd','dcba');
А вот и мой код:

function replace(s,p1,p2:string):string;
var i,l1,l2:integer;
begin
l1:=length(p1);
l2:=length(s);
repeat
i:=ansipos(p1,s);
if i=0 then break;
s:=copy(s,1,i-1)+p2+copy(s,i+l1,l2);
until i=0;
replace:=s;
end;

Она хорошо работает, но есть одно НО, она шикарно тормозит, особенно
если строка больше 30Kb, а если строка больше 400КВ, то комп ваще
виснит.


Помогите плз оптимизировать.

Заранее спасибо.


--------------------
RTFM - "Всё для программиста" Это уменя есть сайт! Урыл в профайле!
А там.... Ну всё что надо по PHP Delphi CSS HTML JavaScript Perl API ASP MySQL XML С++ VBasic и многое другое.
PM MAIL WWW ICQ   Вверх
Baa
Дата 8.1.2003, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



Уж не знаю, на скоко это оптимизирует... но ИМХО, сморится лучше...
function replace(s, p1,p2:String):string;
var
 i, l1, l2:integer;
Begin
 l1:=length(p1);
 l2:=length(s);
 for i := 1 to (l2-l1)+1 do
   begin
     if (CompareMem(@s[i], @p1[1], l1)) then CopyMemory(@s[i], @p2[1], l1);
   end;
 replace:=s;
end;


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Vit
Дата 9.1.2003, 02:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



А зачем? Если есть стандартная функция StringReplace?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Song
Дата 9.1.2003, 04:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


Профиль
Группа: Участник
Сообщений: 1095
Регистрация: 2.6.2002

Репутация: 2
Всего: 4



:) да..


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
Baa
Дата 10.1.2003, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



Цитата(Vit @ 08.1.2003, 18:07)
А зачем? Если есть стандартная функция StringReplace?

Всегда интересней изобрести свое колесо...
а) из-за незнания, что колесо уже изобретено...
б) нужно колесо определенной формы (под конкретную задачу, а не универсальное)
в) процесс изобретения колеса приносит наслаждение, а также добавляет опыт по изобретению колес.


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Frikazoid
Дата 10.1.2003, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 29.3.2002

Репутация: 1
Всего: 2



Baa, ты прав! Мне доставляет большое удовольствие изобретение колёс.
На самом деле я просто не знал, что такая фун-я существует. Точнее Я
искал её, но не нашёл! У меня просто нет справочника по фун-ям :(

Спасибо всем за участие!


--------------------
RTFM - "Всё для программиста" Это уменя есть сайт! Урыл в профайле!
А там.... Ну всё что надо по PHP Delphi CSS HTML JavaScript Perl API ASP MySQL XML С++ VBasic и многое другое.
PM MAIL WWW ICQ   Вверх
Song
Дата 11.1.2003, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Sysman.ru
***


Профиль
Группа: Участник
Сообщений: 1095
Регистрация: 2.6.2002

Репутация: 2
Всего: 4



:-)))
Ну-ну, не хотите на колесо посмотреть: http://pascal.sources.ru/cgi-bin....2014812


--------------------
Прежде чем сказать "Невозможно", подумай, прав ли ты
PM WWW ICQ   Вверх
Medved
Дата 13.1.2003, 02:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



http://delphi.mastak.ru/cgi-bin....265&n=2 - да... фишка сильная...  :D  :D  :D


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Ramstar
Дата 13.1.2003, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 7.12.2002

Репутация: нет
Всего: 1



да изврат, а можно было проще пребрать на ассемблере и памяти меньше и скорость больше
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0769 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.