Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.54 MB
Время: 0.024 c
1-1086950719
Roma
2004-06-11 14:45
2004.06.27
Как сделать чтобы Font оставался прежний если Edit1.Enabled=false


14-1086001167
TriX
2004-05-31 14:59
2004.06.27
Что с кладовкой случилось ?не че не скачивается


3-1086176413
Alex_xxx
2004-06-02 15:40
2004.06.27
В IB (дятел) текстовый файл с разделителем |


1-1086976921
MuxauJl
2004-06-11 22:02
2004.06.27
будильник


3-1086169122
kot
2004-06-02 13:38
2004.06.27
Delphi 8 + ODBC