Текущий архив: 2004.06.27;
Скачать: CL | DM;
Вниз
чем заменить s:=chr(1)+chr(1).....+chr(1) Найти похожие ветки
← →
lena19 (2004-06-14 23:48) [0]всем привет
народ с помощью какой функции или процедуру можно в строчную переменную загнать некоторое колличество одинаковых символов
← →
Fay © (2004-06-14 23:52) [1]что-нибудь типа этого
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;
← →
KilkennyCat © (2004-06-14 23:53) [2]1)цикл
2)возможно ,конкатенацией строки "саму себя с собой"
← →
Fay © (2004-06-14 23:53) [3]2KilkennyCat © (14.06.04 23:53) [2]
>> 2)возможно ,конкатенацией строки "саму себя с собой"
А это не слишком медленно?!
← →
KilkennyCat © (2004-06-14 23:55) [4]
> Fay © (14.06.04 23:53) [3]
честно говоря, не знаю. Попробую сравнить.
← →
lena19 (2004-06-14 23:55) [5]с цыклом я и зделала но неужто нет готовой проседуры ???
← →
VMcL © (2004-06-14 23:55) [6]>>lena19 (14.06.04 23:48)
System.StringOfChar()
StrUtils.DupeString()
← →
KilkennyCat © (2004-06-14 23:56) [7]установить длинну строки и FillChar ?
← →
DrPass © (2004-06-14 23:58) [8]
> 1)цикл
> 2)возможно ,конкатенацией строки "саму себя с собой"
Это слишком сложно. По возможности надо бы обойтись без таких сложных профессиональных терминов, как "цикл" (и упаси боже, "конкатенация")
← →
default © (2004-06-15 00:04) [9]procedure FillString(var Str: String; Ch: Char; Len: Integer);
begin
SetLength(Str, Len);
FillChar(Str[1], Len, Ch)
end;
← →
lena19 (2004-06-15 00:05) [10]TO DrPass
ето очень мудрое замечание а то дай тока повод сечас и объекты задействуют :-)
← →
Fay © (2004-06-15 00:05) [11]Блин! Меня колбасит! 8) За 15 минут уже встретил:
правдо
лудше
цыкл
длинна
Круто!
← →
default © (2004-06-15 00:06) [12]KilkennyCat © (14.06.04 23:56) [7]
где-то в 3 раза быстрей предыдущего за счёт пересылки по 4 байта в FillChar-е, (Len mod 4) байт пересылаются по одному
← →
default © (2004-06-15 00:09) [13]Fay © (15.06.04 00:05) [11]
"длинна" - это правильно...
← →
KilkennyCat © (2004-06-15 00:10) [14]
> Fay © (15.06.04 00:05) [11]
можешь еще поколбаситься: http://www.delphimaster.ru/cgi-bin/anketa.pl?id=1086996474
← →
default © (2004-06-15 00:12) [15]KilkennyCat © (15.06.04 00:10) [14]
да ну ничё прикольного
← →
Fay © (2004-06-15 00:12) [16]В Word проверял? Так вот "длинна" - не имя существительное. 8)
← →
Fay © (2004-06-15 00:14) [17]2KilkennyCat © (15.06.04 00:10) [14]
Дата рождения: 25.08.1987 Не должен был школу-то забыть... 8^)
← →
KilkennyCat © (2004-06-15 00:14) [18]
> Fay © (15.06.04 00:12) [16]
ага. это союз.
← →
lena19 (2004-06-15 00:14) [19]StringOfChar ето то, что надо.
← →
Fay © (2004-06-15 00:15) [20]2KilkennyCat © (15.06.04 00:14) [18]
Нерушимый, надо полагать?
← →
KilkennyCat © (2004-06-15 00:17) [21]
> Fay © (15.06.04 00:15) [20]
Йамдукс - разрушим все!
← →
Fay © (2004-06-15 00:18) [22]2lena19 (15.06.04 00:14) [19]
Могла бы и сама состряпать.
Помню, меня сестрёнка спросила - "как в C называется функция факториала?"... 8)
← →
GuAV © (2004-06-15 00:21) [23]
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;
← →
lena19 (2004-06-15 00:22) [24]to fay
если имеется в виду функция то я её и состряпала на цикле .
а потом решила упростить код
← →
Fay © (2004-06-15 00:26) [25]FillChar(Str[1], Len, Ch) - так лучше не делать
← →
GuAV © (2004-06-15 00:29) [26]
> FillChar(Str[1], Len, Ch) - так лучше не делать
Это про то, что с WideString не пойдёт - ? Или почему ?
← →
lena19 (2004-06-15 00:30) [27]Special4u = 234, StrOfChar = 172, DupeStr = 1141, FillString = 125
← →
Fay © (2004-06-15 00:32) [28]Если склероз мне не изменяет, можно получить ошибку, и связано это с количеством ссылок на строку. Сейчас попробую сгенерить трабл. Получится - покажу.
← →
default © (2004-06-15 00:36) [29]Fay © (15.06.04 00:32) [28]
какие ссылки? FillChar выполняет банальное копирование в выделенную память, с такого же макара можно сказать и про [1]
просто FillChar лучше поскольку [12]
← →
lena19 (2004-06-15 00:37) [30]етот результат получен на процессоре amd 2500+
Special4u = 234, StrOfChar = 172, DupeStr = 1141, FillString = 125
кто меньше :-))
← →
GuAV © (2004-06-15 00:39) [31]
> Получится - покажу.
Имхо не получится, и вот почему:
"Delphi syntax:
procedure SetLength(var S; NewLength: Integer);
Description
...
Following a call to SetLength, S is guaranteed to reference a unique string or 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
← →
KilkennyCat © (2004-06-15 00:46) [32]
> lena19 (15.06.04 00:37) [30]
> етот результат получен на процессоре amd 2500+
> Special4u = 234, StrOfChar = 172, DupeStr = 1141, FillString
> = 125
>
> кто меньше :-))
а у меня все еще считает.... :(
придется отказаться от икстихи...
← →
Fay (2004-06-15 00:58) [33]2default © (15.06.04 00:36) [29]
Я уже проверил. Всё отлично. А когда-то я убил кучу времени на борьбу с такой ошибкой! 8(
Ладно, работает - хорошо. Видать, нет больше таких траблов...
Страницы: 1 вся ветка
Текущий архив: 2004.06.27;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.041 c