Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Pascal / Delphi / Лекции по Turbo Pascal [12].pdf
Скачиваний:
108
Добавлен:
02.05.2014
Размер:
1.06 Mб
Скачать

Одесский колледж компьютерных технологий “СЕРВЕР”

end; until flag;

Тип данных String.

Ранее мы познакомились с типом данных char. Переменные этого типа - символы, в частности, буквы. Сегодня вы узнаете ещё один очень удобный тип данных - String, что в переводе с английского означает “строка”. Переменные этого типа - строки символов.

Вам уже неоднократно приходилось в различных ситуациях пользоваться строками для вывода информации с помощью операторов Write и Writeln. Например:

Writeln('Текст заключённый в кавычки - это и есть строка.');

Для объявления строковых типов и переменных используется служебное слово STRING, вслед за которым в квадратных скобках указывается максимальная длина строки. Например:

VAR

s1: string[70]; s2: string;

или

TYPE Line1: string[70]; Line2: string;

VAR s1: Line1; s2: Line2;

Вприведённых выше примерах переменная s1 в качестве своего значения может иметь любую последовательность символов (каждый из которых имеет тип char) длиной от 0 до 70 символов. В Турбо Паскале максимальная длина строки не может превышать 255 символов. Если размер строки не указан, он считается равным 255. Поэтому переменная s2 может иметь последовательность символов произвольной длины до 255 символов.

Значение строковой переменной может быть присвоено оператором присваивания, либо введено оператором ввода:

s1 := 'Пример строки.'; Readln(s1);

Вслучае присваивания строковой переменной строкового выражения с длиной большей, чем максимально допустимая для данной переменной, происходит "обрубание" строки до максимальной длины.

Для строковых величин определена операция сложения +”: VAR s: string[20];

BEGIN

s := 'Turbo ' + 'Pascal'; Writeln(s1); {TurboPascal}

END.

44

Одесский колледж компьютерных технологий “СЕРВЕР”

Важнейшее отличие строк от обычных символьных массивов заключается в том, что строки могут динамически изменять свою длину. Например, если после присваивания

att := 'Короткая строка';

длина строки составит 15 символов, то следующее присваивание att := att + ' стала длиннее';

увеличит её длину до 29 символов.

Функции для работы со строками.

Length (S) Возвращает текущий размер строки. S - строка, у которой определяется размер.

Copy (S; I; C) Создаёт подстроку строки S. S - исходная строка; I - номер первого, выделяемого символа строки, (если значение больше длины строки, возвращается пустая строка); C - число выделяемых символов (если всех необходимых символов в строке нет, возвращается имеющийся остаток строки).

Pos (P,S) Поиск последовательности P в строке S (результат равен номеру первого символа строки S, с которого начинается искомая последовательность, или 0, если такой последовательности в строке нет).

Var a : string; k : integer; Begin

a := ‘абракадабра’; k := Pos(‘кад’,a); writeln(k);

readln End.

В результате работы такой программы на экран будет выведено 5, так как подстрока ‘кад’ начинается в строке a с 5-ой позиции.

Процедуры для работы со строками.

Delete (S, I, C) Удаляет подстроку из строки S. I - номер первого удаляемого символа (если номер больше размера строки, символы не удаляются); C - число удаляемых символов (если символов в строке недостаточно, удаляется остаток символов).

Insert (P, S, I) Помещает подстроку P в строку S (если получается строка слишком большого размера, то она усекается до 255 символов). S - исходная строка; P - подстрока, помещаемая в строку; I - номер позиции исходной строки, начиная с которой помещается подстрока.

Например,если a := ‘ясный день’;

Insert(‘ солнечный’,6,a);

то в результате получится новая строка а – ‘ясный солнечный день’. Str (x [: w [: d]],st) преобразует число x любого вещественного или це-

лого типов в строку st так, как это делает writeln перед выводом: w определя-

45

Одесский колледж компьютерных технологий “СЕРВЕР”

ет общую ширину поля, выделенного под соответствующее символьное представление числа x, а d - количество символов в дробной части.

Val(st,x,code) преобразует строку символов st во внутреннее представление целой или вещественной переменной; параметр code содержит 0,если преобразование прошло успешно, в противном случае он содержит номер позиции в строке st, где обнаружен ошибочный символ, и в этом случаен содержимое x не меняется. В начале строки st могут быть пробелы, а в конце - нет. Например, обращение Val (‘ 123’,k,i) пройдёт успешно: k получит значение 123, в i будет помещён 0, в то время как обращение Val (‘123 ‘,k,i) будет ошибочным: значение k не изменится, а i будет содержать 4.

Пример:

 

VAR x : real;

 

y : integer;

 

st,st1 : string;

 

BEGIN

 

st := ‘12’+’345’;

{st=’12345’}

st1 := copy(st, 3, Length (st) -2);

{st1=’345’}

insert (‘-‘, st1,2);

{st1=’3-45’}

delete (st, pos(‘2’, st),3);

{st=’15’}

str (pi:6:2,st);

{st=’3.14’}

val (‘3,1415’, x,y);{y=2, x остался без изменения, т.к. вместо десятичной точки использована ‘,’}

END.

Строки можно сравнивать между собой. Операции отношения =,<>, >, <, >=, <= выполняются посимвольно, слева направо с учётом кодов символов. Если одна строка короче другой, недостающие символы короткой строки заменяются значением chr(0).

Например, ‘aaa’<’ccc’, ‘abc’<’abcd’.

Доступ к отдельным символам строк производится аналогично доступу к элементам одномерного массива: после имени строковой переменной необходимо в квадратных скобках указать номер символа (элемента) строки.

Распространённой ошибкой является работа с элементами строки без учёта её текущей длины, что иллюстрирует следующий пример программы: VAR

Str: string[26]; i: integer;

BEGIN

Str := 'A';

for i:=1 to 26 do

Str[i] := Chr(Ord('A')+i-1); Writeln(Str);

END.

46