
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.81] |
![]() |
|
Сообщ.
#1
,
|
|
|
PChar
Предопределенный тип PChar обозначает указатель на строку с завершающим нулем. Описание Type PChar = ^Char; Borland Pascal для Windows поддерживает набор расширенных правил синтаксиса (управляемых с помощью директивы компилятора $X) для облегчения обработки строк типа PChar. pChar может указывать на строку, содержащую до 65535 символов (только в 16-битных компиляторах). Т.к. pChar - тип указателя, то для p :pChar допустимо: p := NIL. Процедуры Write, WriteLn, Assign могут использовать перпеменные этого типа в качестве своих параметров. Для работы с переменными этого типа корпорацией Borland был создан специальный модуль Strings, который входит в стандартный пакет BP7. Пример описания константы: ![]() ![]() CONST p :pChar = 'interesting type'; Пример перевода из String в pChar: ![]() ![]() VAR s :String; {обычная строка} p :pChar; {указатель на строку с завершающим нулем} BEGIN ... s := s + #0; {делаем, чтоб строка заканчивалась нулевым символом} p := ^s[1]; {пропускаем нулевой символ (он хранит длину строки) и делаем присваивание} ... END. |
Сообщ.
#2
,
|
|
|
Чудненько %) А как преобразовать обратно из Pchar в строку ?
|
Сообщ.
#3
,
|
|
|
Ну, во-первых, нужно, чтобы наша p (типа pChar) указывали на строку длины не более, чем 255, иначе придется разбивать минимум на несколько обычных строк.
Далее заведем переменную такую ![]() ![]() TYPE tm = Array[1 .. 65535] Of Char; VAR m: ^tm; Делаем m := p; После чего просто собираем строку побуквенно: ![]() ![]() VAR s: String; {строка} i: Byte; {счетчик} Byte(s[0]) := 0; {делаем строку пустой} i := 1; {присваиваем начальное значение счетчику} While (mt^[i] <> #0) And (i <= 255) Do Begin s := s + mt^[i]; {изменяем строку} Inc(i) {увеличиваем счетчик} End; |
Сообщ.
#4
,
|
|
|
Нет, ну что ты, вот гораздо более простой метод:
![]() ![]() const a:pchar='Привет всем, и мне конечно!!!'; var s:string; begin while (a[word(s[0])]<>#0) and (s[0]<#255) do s:=s+a[word(s[0])]; writeln(s); end. |