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

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

Разбор строки по флагу


Страницы:   1 2

Star ©   (2004-08-07 22:07:00) 

Дана строка вот такого содержания  '254356:23256:5346'. Внимание, вопрос! Как разбить эту строку на три, чтобы каждая начиналась после двоеточия? Т.е.:
254356
23256
5346
Буду очень рад вашей помощи.


DRON   (2004-08-09 20:19:00) [1]

А у меня с Random было.
Без него 980 и 80.


Fay   (2004-08-09 18:48:00) [2]

Это на работе. Проц такой же.


Fay   (2004-08-09 18:46:00) [3]

1) 1234 8)
2) 64

... Это без Random


DRON   (2004-08-09 18:39:00) [4]

Fay ©   (09.08.04 18:19) [36]
А у тебя какие цифры? У тебя Max=10^7 ?


Fay   (2004-08-09 18:19:00) [5]

2 DRON   (09.08.04 18:03) [35]
>> AthlonXP 2000+ разница в 30 раз (4500 и 150)
Это очень долго. Страно.


DRON   (2004-08-09 18:03:00) [6]

Fay ©   (09.08.04 17:56) [33]:
AthlonXP 2000+ разница в 30 раз (4500 и 150)


DRON   (2004-08-09 18:00:00) [7]

Sectey ©   (09.08.04 16:36) [31]:
Мы не изобретаем велосипеды, а делаем их. Это называется программированием и за это деньги платят. По поводу QStrings: практически все функции из неё есть в 7-ой версии (Masks,StrUtils итд), возможно они выполняются чуть быстрее, но я не думаю, что автор делал такое же тестирование как в Borlande, да и VCL их не будет использовать.
Для решения первоначальной задачи можно использовать Q_StrTok но она (в общем случае) не будет быстрее [19], так как изменяет исходную строку (лишнее действие). Кстати, исходник Q_StrTok очень похож на мой вариант :)
To Fay ©   (09.08.04 17:53) [32]:
Там (в QStrings) просто используются всякие аналоги Move и Compare оптимизированные под современные процы и набор функций активно эти аналоги использующий.


Fay   (2004-08-09 17:56:00) [8]

2 DRON   (09.08.04 16:09) [30]
Я, на самом деле, ожидал ответа типа "у меня Athlon такой-то".
Про остальное - в курсе 8)


Fay   (2004-08-09 17:53:00) [9]

2 Sectey ©   (09.08.04 16:36) [31]
Сходите в торгующий велосипедами магазин (побольше). Посмотрите - все велосипеды одинаковые?
Боюсь даже предположить, что я не могу сделать сам такого, что так здорово умеет (предположительно) QStrings.


Sectey   (2004-08-09 16:36:00) [10]

А мне кажется вы опять начинаете изобретать велосипед :-) Есть библиотека QStrings там работа со string на все случае жизни :-)


DRON   (2004-08-09 16:09:00) [11]

Так
PChar(s)[i-1]:=chr(random(27)+65);
ещё чуть чуть быстрее так как не вызывается @UniqueString.
to Fay & Diaz:
Разница в скорости тут, по большей части, зависит не от гигагерц, а от скорости памяти и размера кэша (у вас строка 10 метров).
А Button1Click, по большому счёту, проверяет скорость работы менеджера памяти, при его замене цифры совсем другие получаются.


Fay   (2004-08-09 12:07:00) [12]

У меня C2400/865. Разница в 30 раз.


diaz   (2004-08-09 10:55:00) [13]

-> Fay [26] celeron-500


Думкин   (2004-08-09 07:17:00) [14]

>  [24] Fay ©   (09.08.04 06:49)

Ага. :)


Fay   (2004-08-09 07:16:00) [15]

2 diaz   (09.08.04 07:11) [25]
У тебя какой проц?


diaz   (2004-08-09 07:11:00) [16]

-> Думкин [23] второй в 40 раз быстрее !


Fay   (2004-08-09 06:49:00) [17]

2 Думкин ©   (09.08.04 06:29) [23]
Результаты будут намного интереснее, если не вычислять символ, а колотить константу.


Думкин   (2004-08-09 06:29:00) [18]

> [22] DRON   (09.08.04 02:02)

Угу.
> [21] diaz   (08.08.04 18:49)

Покури такое:
const Max = 10000000;

procedure TfMain.Button1Click(Sender: TObject);
var s : string;
    i : integer;
    a : Cardinal;
begin
    s := '';
    a := GetTickCount;
    Screen.Cursor := crHourGlass;
    try
     for i := 1 to Max do s := s + chr(random(27)+65);
     Button1.Caption := Format('%d ms',[GetTickCount - a])
    finally
     Screen.Cursor := crDefault
    end
end;

procedure TfMain.Button2Click(Sender: TObject);
var s : string;
    i : integer;
    a : Cardinal;
begin
    SetLength(s, Max);
    a := GetTickCount;
    Screen.Cursor := crHourGlass;
    try
     for i := 1 to Max do s[i] := chr(random(27)+65);
     Button2.Caption := Format('%d ms',[GetTickCount - a])
    finally
     Screen.Cursor := crDefault
    end
end;


DRON   (2004-08-09 02:02:00) [19]

to: diaz   (08.08.04 18:47) [20]
число переменных скорость не уменьшает (наоборот можно заранее что-то вычислить и брать затем из переменной), inc не функция - компилятор ставит просто инструкцию inc; low - в большинстве случаев известен на этапе компиляции (то есть это просто константа); SetString - самый быстрый способ получения строки в Delphi-йском формате (работа с самим PChar конечно быстрее из за отсутствия подсчёта ссылок), а вот в цикле из [13] чёрт знает сколько раз вызывается @LStrFromChar, а ещё @LStrCat которая на каждый символ исходной строки дёргает менеджер памяти, что вообще ни в какие ворота не лезет. Нажми Ctrl+Alt+C и посмотри во что превращается с виду безобидная " m1[k]:=m1[k]+s[i] ", даже SetLength(m1[k],Length(m1[k])+1);m1[k][Length(m1[k])]:=s[i]и то быстрее выполняется потому что у компилятора нет специальной функции для добавления символа к строке, он переводит один символ в строку (выделяя для него место на куче!), а потом использует универсальную функцию для сложения строк (которая не оптимизированна под добавление одного символа).


diaz   (2004-08-08 18:49:00) [20]

diaz [20] - это я в защиту YurikGL [13]


Страницы:   1 2

Наверх

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