Типы 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. Выделение памяти для строк. Доступ по индексу
- Функции сравнения строк. Функции StrComp, StrIComp, StrLComp, StrLIComp
- Функции поиска и получения информации о строках. Функции StrEnd, StrLen, StrPos, StrScan, StrRScan
⇑