Буквенный или цифровой введен символ

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

(length(s)<1) ???? слишком неэффективно!
(length(s)<=0)

добавим паскализма!

Код: Выделить всё

function StartsAsDigit(s:string):boolean; inline;
begin
   result:=(length(s)>0) and TCharacter.IsDigit(s[1]);
end;
Аватара пользователя
pda
постоялец
Сообщения: 303
Зарегистрирован: 27.05.2005 19:59:53

Сообщение pda »

SSerge писал(а):кто больше?

Там в принципе просто есть функция IsDigit. Ещё есть isdigit в libc, работает только в unix, принимает ascii код символа.
SSerge
энтузиаст
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Сообщение SSerge »

pda писал(а):Там в принципе просто есть функция IsDigit


Вот именно, что она есть в принципе.
Зато ее нет в официальном списке функций справочной системы fpc. Поиском через гугл по отношению этой функции в freepascal находится исключительно иноязычный срач по поводу того, как правильно применять in ['a'..'z'] с утверждением, что такой функции нет и не будет.
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Если уж вобщем смотреть, то для utf8
1 Определяем длину символа UTF8CharacterLength , для не ascii это всегда больше 1
2 Если длина символа 1 байт, то работаем как и с ascii, в теме уже писали как
Аватара пользователя
pda
постоялец
Сообщения: 303
Зарегистрирован: 27.05.2005 19:59:53

Сообщение pda »

Ism писал(а):Если уж вобщем смотреть, то для utf8

Зачем? Нас же первый символ строки интересует. :)
Аватара пользователя
bormant
постоялец
Сообщения: 408
Зарегистрирован: 21.03.2012 11:26:01

Сообщение bormant »

Ism,
зачем? Не-ASCII символ не может начинаться с #0..#127, в том числе с '0'..'9', поэтому достаточно проверить первый байт, если там '0'..'9' в первом байте, то это точно цифра, незачем извлекать символ по правилам UTF8.
Ответить