Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Функции для работы со строками.


Страницы:   1 2 3

Просто_новичок ©   (2007-05-31 13:02:00) 

Подскажите плиз, какие есть функии для работы со строками, но чтобы были как можно быстрее в выполнении. Функция copy как я понял очень медленная, как и Pos.
А задача вобщем в следующем, есть строка, например: s="00101010010111001010101001101001010100101010101011010010111011000010101101011 0101001010110000001111010101", только раз так в 1000 подлиннее, а то и больше...
И есть вторая строка, например: s1="00101". Так вот, мне нужно найти в первой строке комбинацию "00101" и удалить её, она будет первой, так построен алгоритм, все другие комбинации исключены, я делаю так:
s:=copy(s,length(s1)+1,length(s)); Эта функция выполняется в программе очень много раз и очень тормозит её выполнение, как можно сделать тоже самое, но с помощью других функций, болеебыстродействующих, какие есть болеебыстродействующие функции?


Просто_новичок   (2007-05-31 13:12:00) [41]

Плохиш, ты думаешь эта функция работать бустрее будет, чем copy?


default   (2007-05-31 13:12:00) [42]


> Так вот, мне нужно найти в первой строке комбинацию "00101"
> и удалить её, она будет первой, так построен алгоритм, все
>


> Эта функция выполняется в программе очень много раз


что-то думается мне что у тебя ошибка дизайна


G_M_S   (2007-05-31 13:11:00) [43]


> s:=copy(s,length(s1)+1,length(s));

1. Проще юзать StringReplace (он, скорее всего, и работать быстрее будет),
да и вызов у нее будет всего 1, а немного раз.
2. Вызванный 2 раза length тоже может замелять. length(s1) можно выполнить заранее, т.к. во время работы он не меняется (как я понял из ТЗ).
3. Можно почитать Кнута на предмет алгоритмов поиска, хотя это путь для одептов.


Плохиш   (2007-05-31 13:10:00) [44]


> А как можно ещё удалить?

"удалить" в переводе на англитцкий "delete"...


Просто_новичок   (2007-05-31 13:09:00) [45]

Сергей М, да, нужно удалить, я его и удаляю, то есть если у меня было: s="00101001101", и надо удалить s1="00101", то после выполнения: s:=copy(s,length(s1)+1,length(s)); - у меня в s хранится уже "001101". А как можно ещё удалить?


Reindeer Moss Eater   (2007-05-31 13:07:00) [46]

Скорее всего тормозят не эти функции, а перераспределение памяти под строки.


Сергей М.   (2007-05-31 13:07:00) [47]


> я делаю так:
> s:=copy(s,length(s1)+1,length(s));


А зачем ты делаешь копию ?
Тебе ведь всего лишь удалить нужно найденный фрагмент ?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо