Типи PAnsiChar, PWideChar. Функції роботи з ASCIIZ-рядками які змінюють вміст рядка
Зміст
- 1. Функція StrCat. Додавання одного рядка в кінець другого
- 2. Функція StrLCat. Додати рядок в кінець іншого рядка з заданим обмеженням на довжину результуючого рядка
- 3. Функції StrLower та StrUpper. Приведення символів до верхнього та нижнього регістрів
- 4. Функція StrCopy. Копіювання одного рядка в інший
- 5. Функція StrECopy. Копіювання одного рядка в інший з поверненням покажчика на кінець рядка
- 6. Функція StrLCopy. Копіювання заданої кількості символів з одного рядка в інший
- 7. Функція StrMove. Перемістити один рядок в інший
- Споріднені теми
Пошук на інших ресурсах:
1. Функція StrCat. Додавання одного рядка в кінець другого
Функція StrCat додає один рядок в кінець другого і повертає покажчик на результуючий рядок. Функція має дві реалізації для типів PAnsiChar та PWideChar
function StrCat(Dest: PAnsiChar; const Source: PAnsiChar): PAnsiChar; function StrCat(Dest: PWideChar; const Source: PWideChar): PWideChar;
тут
- Dest – рядок-приймач. В цей рядок додається інший рядок Source;
- Source – рядок-джерело, який додається в кінець рядка Dest.
Приклад.
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var ps1 : PAnsiChar; // Оголошення змінних типу PAnsiChar ps2 : PAnsiChar; ps3 : PAnsiChar; s : string; begin // 1. Ініціалізувати змінні ps1, ps2 ps1 := 'bestprog'; ps2 := '.net'; // 2. ps3 = ps1 + ps2 StrCat(ps3, ps1); // ps3 = 'bestprog' StrCat(ps3, ps2); // ps3 = 'bestprog.net' // 3. Вивести ps3 на консоль Writeln(StrPas(ps3)); readln; end.
⇑
2. Функція StrLCat. Додати рядок в кінець іншого рядка з заданим обмеженням на довжину результуючого рядка
З допомогою функції StrLCat можна додавати один рядок до іншого з задаванням обмеження на результуючий рядок. Для типів PAnsiChar та PWideChar оголошення функції наступне
function StrLCat(Dest: PAnsiChar; const Source: PAnsiChar; MaxLen: Cardinal): PAnsiChar; function StrLCat(Dest: PWideChar; const Source: PWideChar; MaxLen: Cardinal): PWideChar;
тут
- Dest – рядок-приймач. Це є результуючий рядок, до якого додається рядок Source;
- Source – рядок-джерело. Цей рядок додається до рядка Dest;
- MaxLen – максимальна довжина результуючого рядка.
Функція повертає покажчик на результуючий рядок.
Приклад.
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var ps1 : PWideChar; ps2 : PWideChar; ps3 : PWideChar; begin // Функція StrLCat // 1. Сформувати рядки ps1, ps2 // 1.1. Зарезервувати пам'ять розміром у 10 символів (20 байт) ps1 := WideStrAlloc(10); ps2 := WideStrAlloc(10); // 1.2. Скопіювати дані в рядки StrCopy(ps1, '12345'); StrCopy(ps2, '67890'); // 1.3. Вивести рядки ps1, ps2 для контролю Writeln('ps1 = ', StrPas(ps1)); Writeln('ps2 = ', StrPas(ps2)); // 2. Зарезервувати пам'ять для результуючого рядка ps3 := WideStrAlloc(20); // 3. Додати до результуючого рядка рядок ps1, // в рядку ps3 - 3 символи StrLCat(ps3, ps1, 3); // ps3 = '123' // 4. Додати до рядка ps3 рядок ps2, // в рядку ps3 максимум 5 символів StrLCat(ps3, ps2, 5); // ps3 = '12367' // 5. Вивести рядок ps3 Writeln('ps3 = ', StrPas(ps3)); // 6. Звільнити пам'ять, яка була раніше виділена // під рядки ps1, ps2, ps3 StrDispose(ps1); StrDispose(ps2); StrDispose(ps3); Readln; end.
Результат
ps1 = 12345 ps2 = 67890 ps3 = 12367
⇑
3. Функції StrLower та StrUpper. Приведення символів до верхнього та нижнього регістрів
Функція StrLower приводить симвори рядка до нижнього регістру, якщо вони знаходяться у верхньому регістрі. Функція StrUpper виконує зворотню операцію по відношенню до StrLower і приводить символи рядка до верхнього регістру. Робота обидвох функцій стосується тільки символів латинського алфавіту.
Для типів PAnsiChar та PWideChar синтаксис оголошення функцій наступний
function StrLower(Str: PAnsiChar): PAnsiChar; function StrLower(Str: PWideChar): PWideChar; function StrUpper(Str: PAnsiChar): PAnsiChar; function StrUpper(Str: PWideChar): PWideChar;
тут
- Str – рядок, символи якого приводяться до відповідного регістру.
Приклад.
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var ps1 : PWideChar; begin // Функції StrLower, StrUpper // 1. Сформувати рядок ps1 ps1 := StrNew('ABCdefgh'); Writeln('ps1 = ', StrPas(ps1)); // 2. Привести символи рядка ps1 до нижнього регістру StrLower(ps1); Writeln('StrLower(ps1) = ', StrPas(ps1)); // 3. Привести символи до верхнього регістру StrUpper(ps1); Writeln('StrUpper(ps1) = ', StrPas(ps1)); // 4. Звільнити пам'ять, виділену для рядка ps1 StrDispose(ps1); Readln; end.
Результат
ps1 = ABCdefgh StrLower(ps1) = abcdefgh StrUpper(ps1) = ABCDEFGH
⇑
4. Функція StrCopy. Копіювання одного рядка в інший
Функція StrCopy копіює значення одного рядка в інший. Відповідно до документації оголошення функції для типів PAnsiChar та PWideChar наступні
function StrCopy(Dest: PAnsiChar; const Source: PAnsiChar): PAnsiChar; function StrCopy(Dest: PWideChar; const Source: PWideChar): PWideChar;
тут
- Dest – рядок-приймач;
- Source – рядок-джерело. Обидва рядки розміщуються в різних ділянках пам’яті
Функція повертає покажчик на початок результуючого рядка.
При виклику функції пам’ять для рядка-джерела повинна бути попередньо виділена.
Приклад.
У прикладі демонструються різні операції над рядками типу PWideChar, а саме:
- ввід з консолі та конвертування з типу String в тип PWideChar;
- отримання фрагменту пам’яті для рядка типу String (функція WideStrAlloc());
- створення рядка типу PWideChar;
- вивід на екран рядка типу PWideChar;
- копіювання рядків типу PWideChar з допомогою функції StrCopy;
- звільнення пам’яті, виділеної під рядки типу PWideChar.
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var ps1 : PWideChar; ps2 : PWideChar; s : string; begin // Функція StrCopy // 1. Створити вихідний рядок, // рядок вводиться з клавіатури в консольному додатку Write('s = '); Readln(s); // 2. Конвертувати s => ps1 // 2.1. Виділити пам'ять для рядка ps1, // розмір пам'яті рівний довжині рядка s ps1 := StrNew(WideStrAlloc(Length(s))); // 2.2. Скопіювати рядок s => ps1 StrPCopy(ps1, s); // 3. Виділити пам'ять для рядка ps2, // розмір пам'яті рівний довжині рядка ps1 ps2 := StrNew(ps1); // це є теж копіювання // 4. Вивести рядок ps2 Writeln('ps2 = ', StrPas(ps2)); // 5. Змінити рядок ps1 ps1[0] := '+'; ps1[1] := '='; // 6. Вивести знову рядок ps1 Writeln('ps1 = ', StrPas(ps1)); // 7. Скопіювати рядок ps1 в рядок ps2 - функція StrCopy StrCopy(ps2, ps1); // ps2 <= ps1 // 8. Вивести рядок ps2 повторно Writeln('ps2 = ', StrPas(ps2)); // 9. Звільнити пам'ять, виділену для рядків ps1, ps2 StrDispose(ps1); StrDispose(ps2); Readln; end.
Результат
s = 12345 ps2 = 12345 ps1 = +=345 ps2 = +=345
⇑
5. Функція StrECopy. Копіювання одного рядка в інший з поверненням покажчика на кінець рядка
Функція StrECopy так само як і функція StrCopy копіює один рядок в інший. Особливість цієї функції полягає в тому, що покажчик встановлюється на кінець результуючого рядка а не на початок. Оголошення функції для типів PAnsiChar та PWideChar наступне
function StrECopy(Dest: PAnsiChar; const Source: PAnsiChar): PAnsiChar; function StrECopy(Dest: PWideChar; const Source: PWideChar): PWideChar;
тут
- Dest – рядок-приймач;
- Source – рядок-джерело.
Приклад.
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var ps1 : PAnsiChar; ps2 : PAnsiChar; ps3 : PAnsiChar; begin // Функція StrECopy // 1. Задати рядок типу PAnsiChar ps1 := AnsiStrAlloc(20); StrCopy(ps1, 'ABCD'); // ps1 = 'ABCD' Writeln('ps1 = ', ps1); // 2. Встановити покажчик ps2 на початок рядка ps1 ps2 := ps1; Writeln('ps2 = ', ps2); // 3. Дописати до рядка ps1 рядок 'DEF' StrECopy(ps1, 'DEF'); Writeln('StrECopy(ps1, ''DEF'')'); Writeln('ps1 = ', ps1); // ps1 = DEF Writeln('ps2 = ', ps2); // ps2 = DEF - покажчик ps2 також змістився Readln; end.
Результат
ps1 = ABCD ps2 = ABCD StrECopy(ps1, 'DEF') ps1 = DEF ps2 = DEF
⇑
6. Функція StrLCopy. Копіювання заданої кількості символів з одного рядка в інший
Функція StrLCopy призначена для копіювання заданої кількості символів з вихідного рядка в результуючий рядок. Специфікація функції для типів PAnsiChar та PWideChar має вигляд
function StrLCopy(Dest: PAnsiChar; const Source: PAnsiChar; MaxLen: Cardinal): PAnsiChar; function StrLCopy(Dest: PWideChar; const Source: PWideChar; MaxLen: Cardinal): PWideChar;
тут
- Dest – рядок-приймач;
- Source – рядок-джерело;
- MaxLen – кількість символів рядка Source, які копіюються в рядок Dest.
Приклад.
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var ps1 : PWideChar; ps2 : PWideChar; begin // Функція StrLCopy // Вихідний рядок ps1 := StrNew('Hello, world!'); // Створити новий рядок ps2 := StrNew(ps1); // Скопіювати перші 5 символів рядка ps1 => ps2 StrLCopy(ps2, ps1, 5); // ps2 = 'Hello' Writeln('ps1 = ', StrPas(ps1)); Writeln('ps2 = ', StrPas(ps2)); Readln; end.
Результат
ps1 = Hello, world! ps2 = Hello
⇑
7. Функція StrMove. Перемістити один рядок в інший
Функція StrMove переміщує послідовність символів з вихідного рядка в цільовий рядок. Оголошення функції для типів PAnsiChar та PWideChar має вигляд
function StrMove(Dest: PAnsiChar; const Source: PAnsiChar; Count: Cardinal): PAnsiChar; function StrMove(Dest: PWideChar; const Source: PWideChar; Count: Cardinal): PWideChar;
тут
- Dest – рядок-приймач;
- Source – рядок-джерело;
- Count – кількість символів, які потрібно скопіювати.
Функція повертає покажчик на цільовий рядок. Функція не знищує вихідний рядок Source.
Приклад.
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var ps1 : PWideChar; ps2 : PWideChar; begin // Функція StrMove // 1. Сформувати рядок ps1 ps1 := StrNew('ABCDEFGH'); Writeln('ps1 = ', StrPas(ps1)); // 2. Виділити фрагмент пам'яті для рядка ps2 // Розмір фрагменту рівний довжині рядка ps1 ps2 := WideStrAlloc(StrLen(ps1)); // 3. Перенести дані з рядка ps1, // переноситься 5 символів StrMove(ps2, ps1, 5); // 4. Додати символ '\0' в кінець рядка ps2 ps2[5] := #0; // 4. Вивести рядки Writeln('ps2 = ', StrPas(ps2)); Writeln('ps1 = ', StrPas(ps1)); // 5. Звільнити пам'ять, виділену для рядків ps1, ps2 StrDispose(ps1); StrDispose(ps2); Readln; end.
Приклад.
ps1 = ABCDEFGH ps2 = ABCDE ps1 = ABCDEFGH
⇑
Споріднені теми
- Реалізація рядків типу PChar в пам’яті комп’ютера. Типи PAnsiChar, PWideChar. Виділення пам’яті для рядків. Доступ за індексомФункції пошуку та отримання інформації про рядки. Функції StrEnd, StrLen, StrPos, StrScan, StrRScan
- Функції порівняння двох рядків. Функції StrComp, StrIComp, StrLComp, StrLIComp
⇑