Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по курсу.docx
Скачиваний:
107
Добавлен:
24.02.2016
Размер:
2.8 Mб
Скачать

11.1. Зачем нужны строки

Уже в первой лабораторной работе мы столкнулись с понятием строки, когда использовали «окно однострочного редактора» TEdit.text, «окно много­строчного редактора» ТМето. И мы уже знаем, что строка - это последова­тельность символов. В системе Delphi имеется удобный ввод и отображение информации из окон (или в окна) этих редакторов в виде строк. Т.е. вводится информация в виде строки символов и результат отображается в виде строки символов. Вы уже почувствовали, что работе со строками отводится важное место в языках программирования. Так было не всегда. Первые версии языков программирования, как и Фортран, и Бэйсик, были ориентированы на разра­ботку научных вычислительных программ. Понятие строки, заключенной в апострофы, (например, 'х='), использовалось лишь для наглядного представ­ления выводимой информации. Однако, с широким распространением ПЭВМ появилась насущная потребность во всевозможных программах обработки текстов. С другой стороны, с развитием компьютерной техники и языков высокого уровня, возникло понимание того, что можно создать язык высоко­го уровня, позволяющий писать программы обработки и редактирования тек­стов, компиляторы для новых языков.

Как решить эту проблему? Казалось бы, просто: ввести возможность работы с символами, что было и сделано. В языке Паскаль, а затем и в Си был введен тип char, с которым вы знакомы. Массивы из символов

a: array [1..N] of char; в принципе решают проблему обра­ботки символьной информации. Однако, массив оказался не очень удобной конструкцией в основном из-за фиксированной структуры и сложности вы­полнения операций над ним. В результате творческих поисков в языках поя­вился новый изящный тип переменных: строковый^ Для того, чтобы овладеть навыками работы с этим типом необходимо знать ответы на следующие во­просы.

Как описываются переменные строкового типа ?

Какие операции над переменными этого типа возможны?

Как решать задачи с использованием строковых переменных?

11.2. Описание переменных строкового типа «Короткие строки»

В стандартном Паскале, вплоть до Delphi 1 использовались только «ко­роткие строки», длина которых ограничена 255 символами. В последующих версиях Delphi они описываются следующим образом:

Var sk:string[N]; N<255 или

Var sk:shortstring; - короткая строка максимальной длины, эквивалент Var sk : string[255];

Рассмотрим структуру памяти коротких строк. На этапе трансляции под переменную sk будет отведено N+1 байтов. После выполнения оператора sk:='abc'; в этих ячейках символы будут размещаться следующим обра-

зом:

Sk:

_0_

_3_

1

2

3

4

не

N

испо льзо ваны

При работе со строковой переменной имеется возможность обращаться к отдельным символам строки, как элементам одномерного массива sk.

Ch:=sk[i]; 1<i<N, (var ch:char;)

«Длинные строки»

При внимательном рассмотрении можно увидеть, что «короткие стро­ки» нерационально используют память и ограничены (<=255). В эту строку не поместишь достаточно большой текст, что бывает неудобно. В последних версиях Delphi введены так называемые «длинные строки». Для их описания используется ключевое слово string:

var sd: string;

«Длинные строки» являются динамическими переменными (указателя­ми), память для которых (до 2 Гбайт) выделяется по мере надобности на этапе выполнения программы.

«Широкие строки»

Они отличаются от «длинных строк» только тем, что каждый символ строки кодируется не одним, а двумя байтами памяти (ANSI кодировка по­зволяет работать только с 256 символами, что явно недостаточно, например, при работе с китайским или японским алфавитом). Для описания «широких строк» используется ключевое слово WideString:

var ss: WideString;

Нуль - терминальные строки

Строковые переменные этого типа представляют собой цепочки симво­лов, ограниченные символом конца строки #0. Для их описания используется ключевое слово PChar:

var sc: PChar;

Необходимость в нуль - терминальных строках возникает только при прямом обращении к API - функциям OC. При работе с компонентами Delphi в основном используются более удобные короткие и длинные строки.