Форум: "Основная";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];
ВнизЦиклы... Найти похожие ветки
← →
Agent[007] © (2004-07-01 18:52) [0]Вот функция(самодельная) генерирует строку из одинаковых символов:
function GenStr(P: Char; Count: Integer): string;
var
i: Integer;
begin
for i := 1 to Count do Result := Result + P;
end;
При её обычном использовании все нормально, но вот:
for j:= 0 to 5 do Caption := "a" +GenStr("0", 2)+ "a";
Caption в данном слечае равен "a" + "0"(10 штук(5 * 2)) + "a"
ЧТО ДЕЛАТЬ???
← →
Iconka © (2004-07-01 18:54) [1]А ты что хотел получить в результате?
← →
Fay © (2004-07-01 18:54) [2]А что не так? Кроме
j:= 0 to 5
, конечно.
← →
Agent[007] © (2004-07-01 18:56) [3]GenStr должен давать 2 символа, а даёт 10 !!!
← →
default © (2004-07-01 18:57) [4]Result := "";
for i := 1 to Count do Result := Result + P;
это очень медленный способ)
← →
Agent[007] © (2004-07-01 18:58) [5]Thanks...
← →
Ega23 © (2004-07-01 19:00) [6]function GenStr(P: Char; Count: Integer): string;
var
i: Integer;
begin
for i := 1 to Count do Result := Result + P;
end;
Перед for поставь Result:="";
← →
GuAV © (2004-07-01 19:04) [7]
> Result := "";
Не обязательно.
string по умолчанию AnsiString, а эти инициализюруются компилятором в ""
← →
Ega23 © (2004-07-01 19:06) [8]Не обязательно.
string по умолчанию AnsiString, а эти инициализюруются компилятором в ""
А ты проверь, ради прикола. Я тоже так поначалу подумал, но потом усомнился. Result:=""; действительно помогло.
← →
Плохиш © (2004-07-01 19:08) [9]
> GuAV © (01.07.04 19:04) [7]
Result не инициализируется, в связи с этим и получается [0]
← →
default © (2004-07-01 19:10) [10]GuAV © (01.07.04 19:04) [7]
Result := "" исправляет ошибку
← →
Тимохов © (2004-07-01 19:10) [11]
> GuAV © (01.07.04 19:04) [7]
мое имхо говорит о том, что по умолчанию инициализируются локальные строки.
результаты нет, т.е. строка-результат - это фактически var параметр.
это явно описано в programm control в хелпе
← →
Ega23 © (2004-07-01 19:13) [12]Лично я ВСЕГДА инициализирую начальные значения переменных, кроме тех случаев, когда идёт ЯВНОЕ присвоение (как счётчик цикла, например).
← →
Тимохов © (2004-07-01 19:14) [13]
> Ega23 © (01.07.04 19:13) [12]
если не ошибаюсь строки, дин массивы и интерфейсы, если они локальные в методе инициализировать не надо.
← →
GuAV © (2004-07-01 19:22) [14]Проверил. Таки да.
> инициализируются компилятором в ""
только локальные переменные функции.
дело в том, что string"и для корректной работы reference-counting и copy-on-write должны быть инициализированны, а во что - не важно.
← →
Тимохов © (2004-07-01 19:24) [15]
> GuAV © (01.07.04 19:22) [14]
во-во.
именно для этого и должны быть инициализированы.
результаты типа ansistring идут как доп var параметр - не дело функции инициализировать переданные ей параметры.
← →
Ega23 © (2004-07-01 19:33) [16]если не ошибаюсь строки, дин массивы и интерфейсы, если они локальные в методе инициализировать не надо.
Возможно. Только всё-таки предпочитаю это делать. Исторически сложилось... :о)
← →
default © (2004-07-01 19:34) [17]Ega23 © (01.07.04 19:33) [16]
100%
← →
MBo © (2004-07-02 06:14) [18]1. Такую функцию делать бессмысленно, поскольку уже существует StringOfChar
2. ТАК функцию делать вредно ввиду ее тормознутости - нужно сразу задать длину строки, потом заполнить ее (в цикле или FillChar)
← →
PUser = ^TUser (2004-07-02 06:20) [19]
> for j:= 0 to 5 do Caption := "a" +GenStr("0", 2)+ "a";
Что это такое?
Это всё равно, что
for i := 1 to 100000 do
for j := 1 to 1000000 do
for k := 1 to 1000000 do
for l := 1 to 1000000 do
for m := 1 to 10000000 do
a := 0;
8)
← →
Amoeba © (2004-07-02 13:20) [20]
> MBo © (02.07.04 06:14) [18]
Удивляюсь, что никто из мастеров до этого поста не сказал, что автор вопроса упорно пытается создать велосипед с квадратными колесами, а все дружно кинулись помогать ему в этой мартышкиной работе.
← →
Ega23 © (2004-07-02 13:25) [21]Amoeba © (02.07.04 13:20) [20]
А вопрос был "ЧТО ДЕЛАТЬ?", а не "КАК ПРАВИЛЬНО?"
← →
Amoeba © (2004-07-02 13:29) [22]
> Ega23 © (02.07.04 13:25) [21]
Надо было наставить на истинный путь, как это сделал MBo. Можно было и просто привести код StringOfChar и этим закрыть вопрос.
← →
default © (2004-07-02 13:32) [23]Amoeba © (02.07.04 13:29) [22]
см. [4]
там сказано про тормознутость
он ничего не ответил, видимо пофиг
← →
КаПиБаРа © (2004-07-02 15:08) [24]
> Amoeba © (02.07.04 13:20) [20]
>
> > MBo © (02.07.04 06:14) [18]
>
> Удивляюсь, что никто из мастеров до этого поста не сказал,
> что автор вопроса упорно пытается создать велосипед с квадратными
> колесами, а все дружно кинулись помогать ему в этой мартышкиной
> работе.
Редкая функция. Мало кто про нее помнит.
← →
Ega23 © (2004-07-02 15:15) [25]Редкая функция. Мало кто про нее помнит.
Да я вообще не знал про такую! Теперь буду знать.
Всех функций не узнаешь...
← →
GuAV © (2004-07-02 17:41) [26]А ведь через FillChar вс равно быстрее чем через эту ф-цию.
← →
Amoeba © (2004-07-02 18:23) [27]А если посмотреть библиотеку QStrings, то, если там есть аналог, то он наверняка будет вообще на asm"е.
← →
GuAV © (2004-07-03 01:53) [28]
> то он наверняка будет вообще на asm"е.
FillChar и так на asm"е
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.038 c