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

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

чем заменить s:=chr(1)+chr(1).....+chr(1) [D7, WinXP]


Страницы:   1 2

lena19 ©   (2004-06-14 23:48:00) 

всем привет
народ с помощью какой функции или процедуру можно в строчную переменную загнать некоторое колличество одинаковых символов


Fay   (2004-06-15 00:58:00) [1]

2default ©   (15.06.04 00:36) [29]
Я уже проверил. Всё отлично. А когда-то я убил кучу времени на борьбу с такой ошибкой! 8(
Ладно, работает - хорошо. Видать, нет больше таких траблов...


KilkennyCat   (2004-06-15 00:46:00) [2]


> lena19   (15.06.04 00:37) [30]
> етот результат получен на процессоре amd 2500+
> Special4u = 234, StrOfChar = 172, DupeStr = 1141, FillString
> = 125
>
> кто меньше :-))


а  у меня все еще считает.... :(
придется отказаться от икстихи...


GuAV   (2004-06-15 00:39:00) [3]


> Получится - покажу.

Имхо не получится, и вот почему:
"Delphi syntax:

procedure SetLength(var S; NewLength: Integer);

Description
...
Following a call to SetLength, S is guaranteed to reference a uniquestringor array—that is, a string or array with a reference count of one. If there is not enough memory available to reallocate the variable, SetLength raises an EOutOfMemory exception. "
Процедура FillChar - не поменяет это, т.е. останится уникально реферированная строка. по этому вопросу тж RTFM UniqueString.

> Если склероз мне не изменяет,

LOL


lena19   (2004-06-15 00:37:00) [4]

етот результат получен на процессоре amd 2500+
Special4u = 234, StrOfChar = 172, DupeStr = 1141, FillString = 125

кто меньше :-))


default   (2004-06-15 00:36:00) [5]

Fay ©   (15.06.04 00:32) [28]
какие ссылки? FillChar выполняет банальное копирование в выделенную память, с такого же макара можно сказать и про [1]
просто FillChar лучше поскольку [12]


Fay   (2004-06-15 00:32:00) [6]

Если склероз мне не изменяет, можно получить ошибку, и связано это с количеством ссылок на строку. Сейчас попробую сгенерить трабл. Получится - покажу.


lena19   (2004-06-15 00:30:00) [7]

Special4u = 234, StrOfChar = 172, DupeStr = 1141, FillString = 125


GuAV   (2004-06-15 00:29:00) [8]


> FillChar(Str[1], Len, Ch) - так лучше не делать

Это про то, что с WideString не пойдёт - ? Или почему ?


Fay   (2004-06-15 00:26:00) [9]

FillChar(Str[1], Len, Ch) - так лучше не делать


lena19   (2004-06-15 00:22:00) [10]

to fay
если имеется в виду функция то я её и состряпала на цикле .
а потом решила упростить код


GuAV   (2004-06-15 00:21:00) [11]

procedure Special4u(var s : string; c : Char; n : Integer);
var
i : Integer;
begin
SetLength(s, n);
for i := 1 to n do s[i] := c;
end;

procedure StrOfChar(var s : string; c : Char; n : Integer);
begin
 s:=System.StringOfChar(c, n);
end;

procedure DupeStr(var s : string; c : Char; n : Integer);
begin
 s:=StrUtils.DupeString(c ,n);
end;

procedure FillString(var Str: String; Ch: Char; Len: Integer);
begin
SetLength(Str, Len);
FillChar(Str[1], Len, Ch)
end;

procedure TForm1.Button1Click(Sender: TObject);
const
N = 1000000; m=21;
fn = 'c:\ fifhed\fhkldj\coc3fe9.lsafs';
var
tSpecial4u, tStrOfChar, tDupeStr, tFillString: Cardinal;
i: Integer;
s: string;
begin
tSpecial4u := GetTickCount;
for i := 0 to N do
  Special4u(s,'L',m);
tSpecial4u := GetTickCount - tSpecial4u;
Memo1.Lines.Add(s);  s:='';

tStrOfChar := GetTickCount;
for i := 0 to N do
  StrOfChar(s,'L',m);
tStrOfChar := GetTickCount - tStrOfChar;
Memo1.Lines.Add(s);  s:='';

tDupeStr := GetTickCount;
for i := 0 to N do
  DupeStr(s,'L',m);
tDupeStr := GetTickCount - tDupeStr;
Memo1.Lines.Add(s);  s:='';

tFillString := GetTickCount;
for i := 0 to N do
  FillString(s,'L',m);
tFillString := GetTickCount - tFillString;
Memo1.Lines.Add(s);  s:='';

Caption := Format('Special4u = %d, StrOfChar = %d, DupeStr = %d, FillString = %d',
  [tSpecial4u, tStrOfChar, tDupeStr, tFillString]);
   // Special4u = 249, StrOfChar = 245, DupeStr = 2800, FillString = 150
end;


Fay   (2004-06-15 00:18:00) [12]

2lena19   (15.06.04 00:14) [19]
Могла бы и сама состряпать.

Помню, меня сестрёнка спросила - "как в C называется функция факториала?"... 8)


KilkennyCat   (2004-06-15 00:17:00) [13]


> Fay ©   (15.06.04 00:15) [20]

Йамдукс - разрушим все!


Fay   (2004-06-15 00:15:00) [14]

2KilkennyCat ©   (15.06.04 00:14) [18]
Нерушимый, надо полагать?


Fay   (2004-06-15 00:14:00) [15]

2KilkennyCat ©   (15.06.04 00:10) [14]
Дата рождения: 25.08.1987Не должен был школу-то забыть... 8^)


lena19   (2004-06-15 00:14:00) [16]

StringOfChar ето то, что надо.


KilkennyCat   (2004-06-15 00:14:00) [17]


> Fay ©   (15.06.04 00:12) [16]

ага. это союз.


Fay   (2004-06-15 00:12:00) [18]

В Word проверял? Так вот "длинна" - не имя существительное. 8)


default   (2004-06-15 00:12:00) [19]

KilkennyCat ©   (15.06.04 00:10) [14]
да ну ничё прикольного


KilkennyCat   (2004-06-15 00:10:00) [20]


> Fay ©   (15.06.04 00:05) [11]

можешь еще поколбаситься: http://www.delphimaster.ru/cgi-bin/anketa.pl?id=1086996474


Страницы:   1 2

Наверх

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