Подтвердить что ты не робот

Как получить первый элемент в строке?

Я пытаюсь выяснить способ проверки первого элемента строки, если это число или нет.

if not(myString[0] in [0..9]) then //Do something

Проблема в том, что я получаю сообщение об ошибке "Элемент 0 недоступен - используйте" Длина "или" Установить длину "

Еще один способ пришел ко мне из моего C-like exprieince - преобразовать первый элемент строки в char и проверить char, но нет никакой разницы в ошибках компиляции.

if not(char(myString[0]) in [0..9]) then //Do something

Как это сделать?

4b9b3361

Ответ 1

Строки основаны на 1:

if not (myString[1] in ['0'..'9']) then // Do something

Ответ 2

Pascal и Delphi индексируют строку из 1. Это наследие от времени, когда нулевой байт содержал длину, а в следующем 255 (индекс от 1 до 255) содержались фактические символы. Джоэл Спольский написал неплохую статью о проблемах с строкой:
http://www.joelonsoftware.com/articles/fog0000000319.html

Ответ 3

Строки Delphi используют индекс на основе 1, поэтому просто перепишите на

if not(myString[1] in ['0'..'9']) then //Do something

Также обратите внимание на кавычки вокруг 0..9, иначе вы бы сравнивали символы с целыми числами.

Ответ 4

Мы должны иметь в виду некоторые вещи:

  • Строка в Delphi основана на 0 для мобильных платформ и 1 для Windows.
  • Строка в старых версиях Delphi AnsiString (1-байтная за char) и WideString в новых версиях (2 байта на char).
  • Delphi поддерживает набор AnsiChar, но не поддерживает набор WideChar.

Итак, если мы хотим написать код, совместимый со всеми версиями Delphi, то это должно быть примерно так:

if (myString[Low(myString)]>='0') and (myString[Low(myString)]<='9') then
  // Do something

Ответ 5

if not (myString [0] в [0..9]), то//Делаем что-то

Если вы используете Delphi 2009, класс TCharacter в Character.pas имеет такие функции, как IsDigit, чтобы упростить эти операции.

Как только вы исправите индексирование, конечно.:)

Ответ 6

Самый простой способ проверить, является ли первый символ строки целочисленным, а затем отправить:

var
  iResult : integer;
begin
  if TryStrToInt( mySTring[1], iResult) then
    begin
      // handle number logic here iResult = number
    end
  else
    begin
      // handle non number logic here
    end;
end;    

Ответ 7

Я использую функцию утилиты для проверки всей строки:

function IsNumeric(const Value: string): Boolean;
var
  i: Integer;
begin
  Result := True;
  for i := 1 to Length(Value) do
    if not (Value[i] in ['0'..'9','.','+','-']) then
    begin
      Result := False;
      Break;
    end;
end;

Вышеприведенный код предназначен для версий Delphi до 2007 года. В 2007 и 2009 годах вы можете изменить целочисленную переменную я на символ c и использовать вместо c значение Value.

Чтобы проверить только целые числа, удалите '.' из набора символов для тестирования.

Ответ 8

Это неверно. Строки ISO и старый Pascal также начинались с одного. Это просто общая конвенция, и afaik s [0] вещь является результатом того, что она является вакантной и дешевой для кодирования в интерпретаторе байт-кода UCSD. Но последний бит до моего времени, так что только мои догадки.

Это связано с тем, что способность Pascal имеет произвольную верхнюю и нижнюю границы, что обеспечивает большее количество типов доступа к массивам.

Действительно, старые строки Паскаля (до начала восьмидесятых) были еще хуже, чем C-бит. Были использованы множественные соглашения, но все они были основаны на статических массивах (например, на раннем этапе C), но они обычно были заполнены пробелами, поэтому вы сканировали с конца до окончания пробелов.

(удалено прежний тег, поскольку на основании 1 не является устаревшим. Доступ к s [0] как длина IS является устаревшим, но это не то, о чем идет речь)

Ответ 9

Foreach element in strName
  if not element in [0-9] then
     do something 
  else
    element is a digit
end if

Не забудьте цитату между цифрами.

Ответ 10

С более поздними обновлениями для мобильного кода Delphi индекс нижней строки изменился с 0 на 1. Когда вы компилируете старые программы, они скомпилируются и запускаются правильно, используя начальный индекс 0. Программы, созданные с более поздней IDE, вызывают ошибку. Когда у вас есть смеси, жизнь становится сложной!

Было бы неплохо иметь более старую программу и сообщать IDE, что вы хотите ее обновить (возможно, это исправит другие вещи, например, шрифты, получающие скремблирование при ответе на телефонный звонок!), но это будьте добры, чтобы добиться согласованности!