Pascal. Типи PAnsiChar, PWideChar. Функції порівняння двох рядків

Типи PAnsiChar, PWideChar. Функції порівняння двох рядків


Зміст


Пошук на інших ресурсах:

1. Функція StrComp. Порівняння двох рядків

Функція StrComp реалізує порівняння рядків. Оголошення функції для типів PAnsiChar та PWideChar наступне

function StrComp(const Str1, Str2: PAnsiChar): Integer;
function StrComp(const Str1, Str2: PWideChar): Integer;

тут

  • Str1, Str2 – рядки, які порівнюються.

Функція повертає цілочисельне значення, яке інтерпретується наступним чином:

  • якщо Str1<Str2, то повертається від’ємне число;
  • якщо Str1>Str2, то повертається додатнє число;
  • якщо Str1=Str2 (рядки еквівалентні), то повертається 0.

Приклад.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  ps1 : PWideChar;
  ps2 : PWideChar;
  res : Integer;
  s : string;

begin
  // Функція StrComp

  // 1. Створити вихідні рядки
  ps1 := StrNew('1234567');
  ps2 := StrNew('12345678');

  // 2. Вивести рядки
  Writeln('ps1 = ', StrPas(ps1));
  Writeln('ps2 = ', StrPas(ps2));

  // 3. Порівняти рядки - викликати StrComp
  res := StrComp(ps1, ps2);

  // 4. Обробити результат
  if res > 0 then
    Writeln('ps1 > ps2')
  else
  if res = 0 then
    Writeln('ps1 = ps2')
  else
    Writeln('ps1 < ps2');

  // 5. Звільнити пам'ять, виділену для рядків ps1, ps2
  StrDispose(ps1);
  StrDispose(ps2);

  Readln;
end.

Результат

ps1 = 1234567
ps2 = 12345678
ps1 < ps2

 

2. Функція StrIComp. Порівняння рядків без врахування регістру символів

Функція StrIComp використовується для порівняння двох рядків без врахування регістру символів. Функція працює так само як і функція StrComp. Специфікація функції для типів PAnsiChar та PWideChar виглядає наступним чином

function StrIComp(const Str1, Str2: PAnsiChar): Integer;
function StrIComp(const Str1, Str2: PWideChar): Integer;

тут

  • Str1, Str2 – рядки, що порівнюються.

Функція повертає позитивне значення, якщо Str1 > Str2. Якщо Str1 < Str2, то функція повертає від’ємний результат. Якщо в лексикографічному порядку рядки рівні, то функція повертає 0.

Приклад.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  ps1 : PWideChar;
  ps2 : PWideChar;
  res : Integer;

begin
  // Функція StrIComp - порівняння рядків без врахування регістру символів

  // 1. Задано два рядки
  ps1 := StrNew('ABCD');
  ps2 := StrNew('abcd');

  // 2. Вивести рядки
  Writeln('ps1 = ', StrPas(ps1));
  Writeln('ps2 = ', StrPas(ps2));

  // 3. Порівняти рядки, отримати результат
  res := StrIComp(ps1, ps2);

  // 4. Вивести результат
  if res = 0 then Writeln('ps1 = ps2');
  if res > 0 then Writeln('ps1 > ps2');
  if res < 0 then Writeln('ps1 < ps2');

  // 5. Звільнити пам'ять
  StrDispose(ps1);
  StrDispose(ps2);

  Readln;
end.

Результат

ps1 = ABCD
ps2 = abcd
ps1 = ps2

 

3. Функція StrLComp. Порівняння двох рядків з заданою максимальною довжиною

Функція StrLComp використовується для порівняння рядків. При цьому порівнюється фіксована кількість символів, що задані параметром функції. Оголошення функції для типів PAnsiChar та PWideChar вигладає наступним чином

function StrLComp(const Str1, Str2: PAnsiChar; MaxLen: Cardinal): Integer;
function StrLComp(const Str1, Str2: PWideChar; MaxLen: Cardinal): Integer;

тут

  • Str1, Str2 – рядки, які порівнюються;
  • MaxLen – кількість символів, які приймаються до уваги при порівнянні рядків Str1 та Str2. Якщо довжина рядків більша, зайві символи не враховуються.

Приклад.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  ps1 : PAnsiChar;
  ps2 : PAnsiChar;
  res : Integer;

begin

  // Функція StrLComp - порівняти два рядки з заданою довжиною

  // 1. Задані два рядки
  ps1 := 'ABCDEFGH';
  ps2 := 'ABCD';

  // 2. Порівняти перші 4 символи рядків, отримати результат
  res := StrLComp(ps1, ps2, 4);

  // 3. Обробити результат
  if res > 0 then
    Writeln('ps1 > ps2')
  else
  if res < 0 then
    Writeln('ps1 < ps2')
  else
    Writeln('ps1 = ps2');

  Readln;
end.

Результат

ps1 = ps2

 

4. Функція StrLIComp. Порівняння двох рядків заданої довжини без врахування регістру символів

Функція StrLIComp реалізує посимвольне порівняння рядків з заданою максимальною довжиною без врахування регістру символів. Для типів PAnsiChar та PWideChar функція має наступні оголошення

function StrLIComp(const Str1, Str2: PAnsiChar; MaxLen: Cardinal): Integer;
function StrLIComp(const Str1, Str2: PWideChar; MaxLen: Cardinal): Integer;

тут

  • Str1, Str2 – рядки, що порівнюються;
  • MaxLen – максимально допустима кількість символів, яка порівнюється.

Функція повертає значення більше 0, якщо рядок в лексикографічному порядку Str1 > Str2. Якщо Str1 < Str2, то функція повертає від’ємне значення. Якщо перші MaxLen символів рядків еквівалентні, то функція повертає 0.

Приклад.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  ps1 : PWideChar;
  ps2 : PWideChar;
  res : Integer;

begin

  // Функція StrLIComp

  // 1. Сформувати рядки ps1, ps2
  ps1 := StrNew('ABCDEFGH');
  ps2 := StrNew('abcdef');

  // 2. Порівняти рядки - функція StrLIComp
  res := StrLIComp(ps1, ps2, 6); // Порівнюються перші 6 символів

  // 3. Обробити результат
  if res > 0 then Writeln('ABCDEFG > abcdef');
  if res < 0 then Writeln('ABCDEFG < abcdef');
  if res = 0 then Writeln('ABCDEFG = abcdef'); // +

  // 4. Звільнити пам'ять, виділену для рядків ps1, ps2
  StrDispose(ps1);
  StrDispose(ps2);

  Readln;
end.

Результат

ABCDEFG = abcdef

 


Споріднені теми