Согласие на обработку персональных данных.



04.11.2017
Новые видео и статья Функция Odd.

29.10.2017
Новые видео и статья Функция Low.

23.10.2017
Новая задача Даны натуральные числа от 1 до 33.

22.10.2017
Добавлен раздел Статьи по С/С++.

03.10.2017
Новая книга 1001 вопрос начинающего программиста.

Раздел: Стандартные функции Паскаля

Функция Length

Как стать программистом 2.0 Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее...

Функция Length в Паскале определяет длину строки. Синтаксис:

function Length(S : AStringType) : Integer;

Второй вариант для динамических массивов:

function Length(A : DynArrayType): Integer;

Функция возвращает длину строки S, которая ограничена значением 255 для коротких строк (в классическом Паскале - это максимальная длина строки). Если S - это пустая строка, то функция возвращает 0.

Функция Length может вычислять длину строки для типов AnsiString и WideString.

Для динамических массивов функция возвращает количество элементов в массиве.

Функция определения длины строки Length также поддерживает параметры типа PChar и PWideChar. В этом случае она работает также, как функции StrLen и WStrLen соответственно. В этом случае функция вычисляет длину строки с нулевым окончанием (с завершающим нулём), а время её выполнения пропорционально длине строки, потому что завершающий нулевой символ ищется путём последовательного перебора всех символов строки.

Как определить длину строки в Паскале

Думаю, уже понятно, что сделать это можно с помощью функции Length. Например, так:

str := '0123456789';
n := Length(str);

Однако есть и другой способ, о котором мало кто знает. Правда, этот способ можно использовать только с типом ShortString. Но в большинстве случаев этого строкового типа вполне достаточно.

Этот способ позволяет немного сэкономить процессорное время, так как для его использования не требуется тратить это время на вызов функции.

А суть его проста. Дело в том, что в типе ShortString длина строки хранится в нулевом элементе строки. Как известно, в Паскале отсчёт символов в строке начинается с единицы. Однако в типе ShortString есть и нулевой элемент, в котором и хранится длина строки:

ch := str[0]; //Здесь хранится длина строки типа ShortString
WriteLn(Ord(ch), ' (', ch, ')');

Проблема только в том, что эта длина строки хранится как ASCII-код символа, и получить этот элемент можно только как символ. Но это не беда, потому что мы уже умеет преобразовывать символ в его код с помощью функции Ord.

Пример программы см. в конце статьи.

Как задать длину строки в Паскале

В некоторых случаях для экономии памяти можно задать фиксированную длину строки.

Делать это можно, когда вы точно уверены, что для ваших нужд в вашей программе потребуется, например, строка, в которой будет не более какого-то определенного количества символов.

Задать длину строки в Паскале можно так:

s04 : string[4];   //Строка из 4-х символов
s20 : string[20];  //Строка из 20-ти символов

Затем с этими переменными можно работать как с обычными строками. Только следует помнить, что при попытке поместить, например, в s04 строку длиной более 4 символов, в эту строку будут помещены только первые четыре символа, а остальные будут отброшены.

Ниже приведён пример программы, где рассмотрены все вышеописанные случаи:

program lengthfunc;

var i, n, x : integer;
    ch      : Char;
    str     : ShortString;
    s04     : string[4];      //Строка из 4-х символов
    s20     : string[20];     //Строка из 20-ти символов

begin
  Randomize;
  str := '';
  n := Length(str);    //n = 0
  WriteLn(n);
  str := '0123456789';
  n := Length(str);    //n = 10
  WriteLn(n);
  for i := 1 to n do
    if i = n then Write(str[i])
    else Write(str[i] + '-');
  WriteLn;
  x := Random(26) + 1;
  str := '';
  for i := 1 to x do str := str + Chr(i+64);
  WriteLn(str);
  ch := str[0];   //Здесь хранится длина строки типа ShortString
  WriteLn(Ord(ch), ' (', ch, ')');

  str := '0123456789';
  s04 := str;
  s20 := str;
  WriteLn('str = ', str,    //Выведет 0123456789
          ', s04 = ', s04,  //Выведет 0123
          ', s20 = ', s20); //Выведет 0123456789

  ReadLn;
end.

Директивы компилятора Директивы компилятора
Как это ни странно, но даже многие опытные программисты не используют директивы компилятора, считая их чем-то ненужным и бесполезным. А между тем, директивы компилятора - это очень классная штука. Если их умело применять в своих программах, то можно существенно сократить время на разработку и уменьшить количество рутинных операций. Подробнее...
Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика