Учебно-методическое пособие. Алматы, 2017 ббк


Строковая переменная как массив



бет60/106
Дата03.01.2022
өлшемі483.39 Kb.
#451845
түріУчебно-методическое пособие
1   ...   56   57   58   59   60   61   62   63   ...   106
УЧЕБНИКПаскаль(100217)

2.7.5. Строковая переменная как массив

Рассматривая понятие «массив» мы выяснили, что массивом называют нумерованный список, элементы которого однотипны по структуре и способу использования. Рассмотрим некоторую строку:



Мама мыла раму

Данная строка состоит из 14 символов (включая символ "пробел"), Каждый символ в этой строке стоит на определенном, фиксированном месте. Каждая буква в строке и символы пробела имеют тип-символ, то есть они однотипны по структуре. Все они используются для написания строки. Это значит, что они однотипны и по способу использования. Таким образом, строка представляет собой особую форму одномерного массива, элементами которого являются символы. В нашем случае строка состоит из четырнадцати элементов, поэтому к элементам строки можно обращаться используя их местоположение в строке. Пример:


Stroka:='Мама мыла раму';

A:=Stroka[4];

Write(Stroka[4], Stroka[3], Stroka[2], Stroka[1]);
Результатом будет: переменная с именем А примет значение 'а', а на экран будет выведена строка амаМ. В данном случае мы использовали свойства строки как массива символов. Однако объявление переменной

Stroka : string; и Stroka :array [1..255] of char;

Не являются равноценными.

При описании типа переменной как строковый тип, мы выделяем в памяти место, которое позволяет хранить до 255 символов. Если нам заранее известно, что наша строковая величина не будет превышать определенной длины, например, будет не более 20 символов, то для экономии памяти можно в блоке описания переменных объявить ее как:

Stroka : string[20];

Таким образом, для хранения данной переменной будет выделено 21 байт памяти вместо 256 байт.

Внимание! Вопрос: Почему память выделяется для 255 или для 20 символов как в последнем случае, а занимает на один байт больше?

Проведем следующий эксперимент: Напишем программу, которая считывает с клавиатуры некоторую строку.


Program Primer_12;

var


Stroka : string;
Procedure Init;

begin


Readln(Stroka);

End;
Procedure Exi;

begin

Writeln(Stroka[0]);



End;
Begin

Init;


Exi;

end.


Запустите программу на выполнение (при вводе ведите достаточно длинную строку) и посмотрите результат.

Если Вы вели строку содержащую 33 символа, то на экране появится символ ’!’, если длина строки веденной Вами была 48 символов, то на экране появится символ ’0’. Таким образом в зависимости от длины строки на экран будет выводиться тот или иной символ, но для строк одинаковой длины символы всегда будут одинаковы. Для того что бы выяснить, что же обозначает этот символ, воспользуемся стандартной функцией Ord(х). Данная функция возвращает порядковый номер для значений перечисляемого типа, здесь х представляет собой значение перечисляемого типа. В процедуре Exi вместо Writeln (Stroka[0]); запишем Writeln(Ord(Stroka[0])); . Опять запустим программу на выполнение. В результате на экран будет выведено число равное длине строки, которую Вы введете с клавиатуры.

Оказывается, в элементе с нулевым индексом хранится символ ASII, код которого и равен длине строки. Вот поэтому и выделяется на один байт памяти больше, то есть в этом байте и хранится информация о длине строки.



Достарыңызбен бөлісу:
1   ...   56   57   58   59   60   61   62   63   ...   106




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет