Главная страница
    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.52 MB
Время: 0.041 c
4-1084621326
Sanek_metaller
2004-05-15 15:42
2004.06.27
Как скопировать файл из "Temporary Internet Files"?


14-1086680613
Vovchik_A
2004-06-08 11:43
2004.06.27
Нервных прсят не смотреть


6-1083856173
shek
2004-05-06 19:09
2004.06.27
NMFTP


14-1086193467
ilnarab
2004-06-02 20:24
2004.06.27
Как открыть exe файл с помощью Delphi?


14-1086899285
KnowledgeSeeker
2004-06-11 00:28
2004.06.27
Память под приложение.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский