Pascal. Типи PAnsiChar та PWideChar. Функції пошуку та отримання інформації про рядки

Типи PAnsiChar та PWideChar. Функції пошуку та отримання інформації про рядки


Зміст


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

1. Функція StrEnd. Отримати покажчик на останній нульовий символ рядка

Функція StrEnd повертає покажчик на символ ‘\0’, який завершує рядок. Оголошення функції для типів PAnsiChar та PWideChar наступні

function StrEnd(const Str: PAnsiChar): PAnsiChar;
function StrEnd(const Str: PWideChar): PWideChar;

тут

  • Str – рядок, для якого потрібно встановити покажчик на останній символ.

Приклад.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  ps1 : PWideChar;
  ps2 : PWideChar;

begin
  // Функція StrEnd

  // 1. Вихідний рядок
  ps1 := StrNew('Hello, world!');

  // 2. Створити новий рядок
  ps2 := StrNew(ps1);

  // 3. Скопіювати перші 5 символів рядка ps1 => ps2
  StrLCopy(ps2, ps1, 5); // ps2 = 'Hello'

  // 4. Встановити покажчик на останній нульовий символ рядка ps2
  ps3 := StrEnd(ps2);

  //  5. Додати три символи !
  StrCat(ps3, '!!!');

  // 6. Вивести рядок ps2
  Writeln('ps2 = ', StrPas(ps2)); // ps2 = 'Hello!!!'

  Readln;
end.

Результат

ps2 = Hello!!!

 

2. Функція StrLen. Отримати довжину рядка

Функція StrLen повертає кількість символів у рядку без врахування символу ‘\0’ кінця рядка. Специфікація функції має вигляд

function StrLen(const Str: PAnsiChar): Cardinal;
function StrLen(const Str: PWideChar): Cardinal;

тут

  • Str – рядок, довжину якого потрібно визначити.

Приклад.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  ps1 : PWideChar;
  length : Integer;

begin

  // Функція StrLen - отримати довжину рядка

  // 1. Заданий рядок
  ps1 := StrNew('bestprog');

  // 2. Визначити довжину рядка
  length := StrLen(ps1);

  // 3. Вивести довжину на екран
  Writeln('StrLen(bestprog) = ', length);

  Readln;
end.

Результат

StrLen(bestprog) = 8

 

3. Функція StrPos. Пошук першого входження підрядка в рядку

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

function StrPos(const Str1, Str2: PAnsiChar): PAnsiChar;
function StrPos(const Str1, Str2: PWideChar): PWideChar;

тут

  • Str1 – рядок, в якому здійснюється пошук;
  • Str2 – підрядок, який потрібно знайти в рядку Str1.

Якщо підрядок знайдено, то функція повертає покажчик на перше входження цього підрядка. Якщо підрядок не знайдено, то функція повертає nil.

Приклад.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  ps1 : PAnsiChar;
  ps2 : PAnsiChar;
  ps3 : PAnsiChar;

begin
  // Функція StrPos

  // 1. Заданий рядок
  ps1 := 'ABCDEF ABCDEFG';

  // 2. Заданий підрядок
  ps2 := 'DE';

  // 3. Знайти підрядок ps2 в рядку ps1
  // 3.1. Виклик StrPos
  ps3 := StrPos(ps1, ps2); // ps3 => 'DEF ABCDEFG'

  // 3.2. Вивести результат
  if ps3 = nil then
    Writeln('Substring ps2 is not in the string ps1')
  else
    Writeln(StrPas(ps3));

  // 4. Знайти підрядок 'JKLMN' в рядку ps1
  // 4.1. Виклик StrPos
  ps3 := StrPos(ps1, 'JKLMN');

  // 4.2. Вивести результат
  if ps3 = nil then
    Writeln('Substring ps2 is not in the string ps1')
  else
    Writeln(StrPas(ps3));

  Readln;
end.

Результат

DEF ABCDEFG
Substring ps2 is not in the string ps1

 

4. Функція StrScan. Пошук першого входження заданого символу в рядку

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

function StrScan(const Str: PAnsiChar; Chr: AnsiChar): PAnsiChar;
function StrScan(const Str: PWideChar; Chr: WideChar): PWideChar;

тут

  • Str – рядок, в якому здійснюється пошук символу;
  • Chr – символ.

Якщо символ Chr є в рядку Str, то функція повертає покажчик на перше входження цього символу в рядку. Якщо символ в рядку не знайдено, то функція повертає nil.

Приклад.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  ps1 : PAnsiChar;
  ps2 : PAnsiChar;
  ps3 : PWideChar;
  ps4 : PWideChar;

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

  // 1. Рядок типу PAnsiChar
  // 1.1. Задати рядок типу PAnsiChar
  ps1 := 'ABCDEF ABCDEFG';

  // 1.2. Знайти перше входження символу 'F' в рядку
  ps2 := StrScan(ps1, 'F');

  // 1.3. Вивести результат
  if ps2 = nil then
    Writeln('The character ''F'' is not in the string ps1')
  else
    Writeln('ps2 = ', ps2); // вивести залишок рядка

  // 2. Рядок типу PWideChar
  // 2.1. Задати рядок типу PWideChar
  ps3 := StrNew('Hello, world!');

  // 2.2. Знайти символ 'w' в рядку
  ps4 := StrScan(ps3, 'w');

  // 2.3. Вивести результат
  if ps3 = nil then
    Writeln('The character ''w'' is not in the string ps1')
  else
    Writeln('ps4 = ', ps4); // ps4 = world!

  // 2.4. Звільнити пам'ять, виділену для ps3
  StrDispose(ps3);

  Readln;
end.

Результат

ps2 = F ABCDEFG
ps4 = world!

 

5. Функція StrRScan. Пошук останнього входження заданого символу в рядку

Функція StrRScan так само як і функція StrScan знаходить символ в рядку. Тільки пошук здійснюється з кінця, тобто функція знаходить останнє входження заданого символу в рядку. Оголошення функції для типів PAnsiChar та PWideChar наступне

function StrRScan(const Str: PAnsiChar; Chr: AnsiChar): PAnsiChar;
function StrRScan(const Str: PWideChar; Chr: WideChar): PWideChar;

тут

  • Str – рядок, в якому здійснюється пошук;
  • Chr – шуканий символ.

Функція повертає покажчик на позицію знайденого символу в рядку. Якщо символу Chr в рядку немає, функція повертає nil.

Приклад.

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  ps1 : PAnsiChar;
  ps2 : PAnsiChar;
  ps3 : PWideChar;
  ps4 : PWideChar;

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

  // 1. Рядок типу PAnsiChar
  // 1.1. Задати рядок типу PAnsiChar
  ps1 := 'ABCDEF ABCDEFG';

  // 1.2. Знайти останнє входження символу 'A' в рядку
  ps2 := StrRScan(ps1, 'A');

  // 1.3. Вивести результат
  if ps2 = nil then
    Writeln('The character ''A'' is not in the string ps1')
  else
    Writeln('ps2 = ', ps2); // вивести залишок рядка

  // 2. Рядок типу PWideChar
  // 2.1. Задати рядок типу PWideChar
  ps3 := StrNew('Hello, world!');

  // 2.2. Знайти останнє входження символу 'o' в рядку
  ps4 := StrRScan(ps3, 'o');

  // 2.3. Вивести результат
  if ps3 = nil then
    Writeln('The character ''o'' is not in the string ps1')
  else
    Writeln('ps4 = ', ps4); // ps4 = orld!

  // 2.4. Звільнити пам'ять, виділену для ps3
  StrDispose(ps3);

  Readln;
end.

Результат

ps2 = ABCDEFG
ps4 = orld!

 


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