Сделай Сам Свою Работу на 5

Строковый тип данных. Работа со строками в Turbo Pascal (4 часа)





 

Цель работы

 

Ознакомление с понятиями динамическая память, динамическая переменная, указатель. Получение практических навыков написания и отладки программ в среде Turbo Pascal для работы с динамическими массивами.

 

Краткая теоретическая справка

Строковый тип данных

Для обработки текста в Турбо Паскале был введён строковый тип данных string (строка). Строковый тип обобщает понятие символьных массивов, позволяя динамически изменять длину строки. Различают строковые переменные и строковые константы.

Строковый тип данных подобен одномерному массиву символов, задаваемому в виде array [0 .. N] of char.

Строковый тип данных может быть объявлен в разделах констант, типов и переменных:

const

Strcon = ' Strcon – это строковая константа';

type

S1 = string [N];

S2 = string;

var

S3, S4: string [M];

S5: string;

S6, S7: S1;

S8: S2;

Строковую константу объявляют в разделе констант. Строковая константа – последовательность любых символов, кроме символа возврата каретки, заключённая в апострофы. Если в строковой конс­танте встречается апостроф, то он удваивается.

Строковую константу можно записать как последовательность ASCII- кодов символов, перед каждым из которых должен стоять символ сеточки #. Например, строки #139#165#170#230#168#239 и 'Лекция' эквиваленты.



Допускается в одной строковой константе совмещать оба вида запи­си, чередуя их любым образом. Это позволяет использовать в строке все виды символов, включая управляющие. Например, допустима запись

#7'Допущена ошибка !'#13'Нажмите клавишу ввода "Enter"',

что означа­ет подачу звукового сигнала (#7) для привлечения внимания оператора, вывод текста "допущена ошибка!", переход на новую строку (#13) и вывод текста на ней "Нажмите клавишу ввода "Enter".

Выражения в квадратных скобках после слова string указывают максимальную длину строки и могут быть любыми константами порядкового типа, принимающими заданные значения в интервале от 1 до 255 включительно, т.е. N ≤ 255 и M ≤ 255. Если значение константы не указано, то длина строки принимается максимально возможной и равной 255 байтам (элементам).

Операции над строками

Значение строковой переменной может быть присвоено оператором присваивания либо прочитано из некоторого файла, например, текстового, соответствующей процедурой присваивания или чтения:



S3 := 'Тульский государственный университет'

S5 := S3;

readln(F, S5) ; {Чтение из файла F}

При вводе строковых переменных вводимые символы размещаются с начала строкового массива. Если количество введённых символов меньше заданной длины строки, то оставшиеся байты заполняются пробелами. Если заданная длина строки меньше, чем длина присваиваемого значения, то лишние символы отбрасываются.

Строка в Паскале трактуется одновременно как простое (скалярное) значение, так и как массив символов. Поэтому некоторые операции могут выполняться над строкой целиком (например, ввод и вывод), а некоторые над каждым символом по отдельности.

К конкретному символу строки можно обратиться как к элементу массива, указав в квадратных скобках после имени строки порядковый номер элемента строки.

В отличие от массивов переменные строкового типа могут участвовать как операнды в инструкциях ввода-вывода, например, в виде readln (S3) или в виде write (S3).

Самый первый байт в строке имеет индекс "0" и содержит текущую длину строки. Поэтому по операторуwrite (S3 [0]) на экран монитора будет выведен символ, описывающий длину строки S3. Количество символов в строке при её вводе определяется автоматически, при этом также автоматически заполняется нулевой байт.

К строкам можно применять операцию объединения (сцепления) строк, называемую конкатенацией и обозначаемую знаком "+". Например, после выполнения оператора

S6 := 'a' + 'b' + 'c';

строка S6 будет содержать текст "abc", а после выполнения оператора



S6 := S6 + 'd' + 'e' + 'f';

– текст "abcdef".

Все остальные действия над строками реализуются с помощью четырёх стандартных строковых функций Concat, Length, Copy, Pos и четырёх строковых процедур Delete, Insert, Str и Val, находящихся в модуле System.

Строковая функция Concat (St1, St2 [, St3, .., StN]) – конкатенация – имеет тип string и возвращает строку, полученную в результате слияния ("сцепления") строк-параметров St1, St2, .., StN. Например, функция

Concat ('abc', 'def');

эквивалентна действию оператора S6 := S6 + 'd' + 'e' + 'f';

Строковая функция Length (St) – "длина" – имеет тип byte и возвращает текущую длину строки St. Функцию Length удобнее использовать вместо выражения St [0], т.к. оно не даёт никаких преимуществ, а только затрудняет чтение текста программы.

Строковая функцияCopy (St, m, n) – "копирование" – имеет тип string и возвращает подстроку длиной n символов из строки St, начиная с символа номера m. Параметры m и n должны имеет тип integer, параметр St – тип string.

Строковая функцияPos (SubSt, St) – "позиция" – имеет типbyte и предназначена для поиска в строке St первого участка текста, совпадающего с текстом строки ("подстроки") SubSt. Если такой участок найден, то функция получит номер позиции, с которой начинается совпадение текстов. Если совпадения нет, то функция получит значение "ноль".

Строковая процедура Delete(St, m, n) – "удаление" – удаляет n символов из строки St, начиная с позиции m. Параметры m и n должны имеет тип integer или byte, параметр St – тип string.

Строковая процедураInsert(SubS, S,n) – "вставка" – вставляет подстроку SubS в строку S, начиная с позиции n. Параметр n должен иметь типinteger или byte.

Строковая процедураStr (X [: width [: decimals]], St) преобразует число Х любого вещественного или целого типов в строку символов St. Такое же преобразование делает процедура Writeln перед выводом. Если количество полей width под строковое представление значения Х не задано, то целое число будет занимать фактическое количество позиций, а вещественное будет записано в показательной форме в виде мантиссы и порядка числа и займёт 22 позиции (16 – мантисса, 8 – порядок). Если количество полей width под строковое представление значения Х задано, то целое число будет занимать width позиций. Если Х – вещественное число, то оно будет представлено в десятичной форме и также занимать width позиций, включая decimals позиций после десятичной точки.

Строковая процедураVal(St, x, y) преобразует строковое изображение числа St в число x целого или вещественного типа. Параметр y содержит признак ошибки преобразования. Если преобразование прошло успешно, то в x помещается результат преобразования, а переменная y будет равна 0. В противном случае параметр y будет содержать номер позиции строки St, где обнаружен ошибочный символ, а содержимое x не изменится.

В Паскале различают ведущие и ведомые пробелы. Пробел в начале строки перед символом называют ведущим, а в конце строки после конечного символа – ведомым.

При обращении к процедуре Val ведомые пробелы недопустимы. Поэтому, например, обращение

Val (' 125', x, y);

будет успешным, x станет равным 125, y – 0, а обращение

Val ('125 ', x, y);

будет ошибочным: значение x станет равным 125, т.е. не изменится, а y станет равным 4, т.е. укажет на ошибку в четвёртой позиции.

Если имеет место обращение

Val ('3,1416', x, y);

то x станет равным3,1416, т.е. не изменится, а y станет равным 2, т.к. имеет место ошибка: вместо десятичной точки поставлена запятая. Если же написано

Val ('3.1416', x, y);

то х будет равен 3.1416, а y станет равным нулю.

Кроме того, к строкам можно применять функцию Upcase (Ch) типа char, которая преобразует латинскую букву Ch в заглавную. Если значение символа Ch не является латинской буквой, то функцияUpcase его не изменит.

К строкам также применимы операции отношения =, <>, <, <=, >, >=. Сравнение строк происходит посимвольно слева направо. При этом один символ считается больше другого, если его код в таблице ASCII больше.

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

Строки считаются равными, если имеют одинаковую длину и у них совпадают соответствующие символы.

Если длина одной строки больше, чем у другой, то строка большей длины считается большей.

Например, приведённые далее соотношения являются правильными:

'A' > '1', 'abcd' < 'acbd', 'abcd' > 'abc', 'abc ' = 'abc', 'c' < 'bbb'.

Любая заглавная буква всегда меньше соответствующей ей строчной, т.к. в кодовой таблице ASCII сначала располагаются все заглавные буквы, а затем строчные, т.е. заглавные буквы имеют меньшие номера.

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.