Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.06;
Скачать: CL | DM;

Вниз

Пустая ли строка   Найти похожие ветки 

 
Nucer   (2009-10-15 20:23) [0]

Как правильно проверять, пустая ли строка?
if Length(str) = 0 then Exit;
или
if str = "" then Exit;


 
oldman ©   (2009-10-15 20:25) [1]

Если str:="            " не является пустой строкой, тогда 1
Иначе 2


 
{RASkov} ©   (2009-10-15 20:31) [2]

:)


 
Nucer   (2009-10-15 20:34) [3]

Не понял... Условия ведь равнозначны по смыслу.
Пустая строка - это именно строка с нулевой длиной, т.е. "".


 
oldman ©   (2009-10-15 20:38) [4]


> Nucer   (15.10.09 20:34) [3]


Тогда какая тебе разница?
Правильно и так и так, не принимая в учет [1]


 
oldman ©   (2009-10-15 20:42) [5]

в первом случае работает функция и оператор сравнения,
во втором только оператор сравнения
Если тебе критично по времени работы, меряй сам.


 
{RASkov} ©   (2009-10-15 21:05) [6]

> в первом случае работает функция

вся функция:
function Length(const S: String): Integer
begin
 Result:=PInteger(Integer(S)-4)^;
end;

:)


 
oldman ©   (2009-10-15 21:16) [7]


> {RASkov} ©   (15.10.09 21:05) [6]


А текст PInteger(Integer(S)-4) можешь привести до кучи?


 
Nucer   (2009-10-15 21:32) [8]

>Если тебе критично по времени работы, меряй сам.

Как оказалось, вот это работает в 4 раза быстрее:
if str = "" then ...


 
palva ©   (2009-10-15 22:04) [9]


> Result:=PInteger(Integer(S)-4)^;

Да вы шо? А если строка пустая? Integer(S) даст нуль - тут в одной ветке говорили. Может врали...


 
Игорь Шевченко ©   (2009-10-16 00:02) [10]


> А если строка пустая? Integer(S) даст нуль


С какого перепугу ?


 
RWolf ©   (2009-10-16 09:42) [11]


Unit1.pas.29: if s="" then subroutine;
0044E1DF 83BBFC02000000   cmp dword ptr [ebx+$000002fc],$00
0044E1E6 7507             jnz +$07
0044E1E8 8BC3             mov eax,ebx
0044E1EA E819000000       call TForm1.subroutine


Unit1.pas.30: if Length(s)=0 then subroutine;
0044E1EF 8B83FC020000     mov eax,[ebx+$000002fc]
0044E1F5 E8A662FBFF       call @LStrLen
0044E1FA 85C0             test eax,eax
0044E1FC 7507             jnz +$07
0044E1FE 8BC3             mov eax,ebx
0044E200 E803000000       call TForm1.subroutine

@LStrLen:
004044A0 85C0             test eax,eax
004044A2 7403             jz +$03
004044A4 8B40FC           mov eax,[eax-$04]
004044A7 C3               ret


Делайте выводы.


 
palva ©   (2009-10-17 11:40) [12]


>> А если строка пустая? Integer(S) даст нуль
> С какого перепугу ?

Это моя Delphi 7 такая пуганная.
{$APPTYPE CONSOLE}
var
 i: Integer;
 s: String;
begin
 s := "";
 i := Integer(s);
 WriteLn(i); // 0
end.


 
Leonid Troyanovsky ©   (2009-10-18 23:44) [13]


> Игорь Шевченко ©   (16.10.09 00:02) [10]

> > А если строка пустая? Integer(S) даст нуль

> С какого перепугу ?

Пуркуа б не па.

--
Regards, LVT.


 
Sha ©   (2009-10-19 00:31) [14]

if s="" быстрее.
Но надо иметь ввиду, что некоторые сторонние библиотеки могут производить пустые строки, для которых s<>"", но length(s)=0



Страницы: 1 вся ветка

Текущий архив: 2009.12.06;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.012 c
4-1223554921
МистерТ
2008-10-09 16:22
2009.12.06
COM-порт изменение скорости при синхронном режиме работы


2-1256018021
Джон Сильвер
2009-10-20 09:53
2009.12.06
Назначение прав доступа NTFS для групп


2-1255580012
uno-84
2009-10-15 08:13
2009.12.06
Создание файла .DBF нужной версии


2-1255442299
Б
2009-10-13 17:58
2009.12.06
Чем писать лог?


2-1255860293
A.L.E.X.A.N.D.E.R.
2009-10-18 14:04
2009.12.06
Реализация float8/16/24