Лабораторная работа №7. Тема: Программирование задач обработки строковых данных.
Тема: Программирование задач обработки строковых данных. Цель: получение навыков работы со строками в Паскале. 1. Теоретический материал. Понятие строковой переменной. Тип STRING (строка) в Паскале широко используется для обработки текстов. Он во многом похож на одномерный массив символов ARRAY [O.. N] OF CHAR, однако, в отличие от последнего, количество символов в строке – переменной может меняться от О до N, где N – максимальное количество символов в строке. Значение N определяется объявлением типа STRING [N] и может быть любой константой порядкового типа, но не более 255, например: Const N = 25; Type Stroka = String [n]; Var S: Stroka; B: String [50]; C: String [230]; D: String [270]; Ошибка, 270>255 Разрешается не указывать N. В этом случае длина строки принимается максимально возможной, а именно N=255. Т.о. согласно описания Var A: String; B: String [255]; переменные А и В могут содержать до 255 символов каждая. Строка в Паскале трактуется как цепочка символов. К любому символу в строке можно обратиться точно так же, как к элементу одномерного массива ARRAY [O.. N] of Char, например: Var St: String [20]; Begin ……. If St [5] = ‘A’ then ….. end Занесение значений в строковую переменную. Значение в строковую переменную может быть занесено с помощью оператора присваивания: =, например: St: = ‘How do you do!’ При этом будут соблюдаться следующие правила: 1. Позиция символа в строке соответствует номеру позиции в строковой переменной, т.е. St [1] = ¢H¢ (см. последний пример), St [2] = ¢о¢ St [3] = ¢w¢ St [4] = ¢ ¢ St [5] = ¢d ¢, ……, St [14] = ¢!¢. 2. Если в правой части количество символов в строке превышает максимально возможный размер значения строковой переменной, расположенный слева от знака присваивания, “лишние” символы отбрасываются. Например, если при описании Var st: string [10]; в программе встретится оператор St: = ¢Hoy do you do!¢ то переменная St получит значение ‘Hoy do you’, а оставшиеся четыре символа будут отброшены. 3. Если в переменной St уже содержались какие-либо значения, оно полностью уничтожается, а в переменную заносится новое значение. Например, если St = ‘Hoy do you’, то после оператора St: = ¢Hello!¢ переменная St = ‘Hello!’ (а не St = ‘Hello! you do’) Справа от знака “присвоить” может стоять как строковая константа, так и строковая переменная, при этом максимальное количество символов в строковых переменных может быть разным, т.е. при описании Var A: string [20]; B: string [10]; C: string [2]; Занести значение в строковую переменную можно и с помощью оператора ввода Readln. При этом соблюдаются все выше перечисленные правила. Длина строки. Длинна строки, определяется с помощью стандартной функции Length (St), которая возвращает целое число, равное количеству символов в строке St, например: Lenght (¢Hello!¢) = 6 Следует заметить, что строковая переменная может содержать пустую строку, которая обозначается двумя подряд идущими апострофами. Длина пустой строки равна нулю: Lenght (¢ ¢) = 0 Самый первый байт строковой переменной имеет индекс 0, и содержит символ, код которого равен длине строки: Ord (St [0]) = Lenght (St). Если этот символ заменить символом, кож которого меньше, то строка уменьшиться по длине настолько, насколько код нового символа меньше, а остальные символы будут безвозвратно утрачены. Если попытаться заменить символ первого элемента на символ с большим кодом, то это приведет к непредсказуемым последствиям. При переприсваивании строковой переменной нового значения, автоматически меняется символ в элементе с индексом ноль. Сложение строк. К строкам можно применять операцию “+” – сцепление, например: St: = ¢a ¢ + ¢b¢; Аналогичным образом функция типа String Concat (St1, St2, …., Stn), n = 1,2,.. возвращает строку, представляющую собой сцепление строк St1, St2,.., Stn, например: St = (¢com¢, ¢pu ¢, ¢ter ¢); {St = ¢computer¢}. Строки можно не только сцеплять, но и вставлять одну в другую. Это осуществляется с помощью процедуры Insert (SubSt, St, N), которая вставляет подстроку SubSt в строку St, начиная с символа с номером N, например: Удаление, вырезка, поиск подстрок. Процедура Delete (St,N,Kol) удаляет Kol символов из строки St, начиная с символа с номером N. Если число символов, которые требуется удалить, превышает число символов в строке St, начиная с указанной позиции (т.е. Length (St)-N+1<Kol), то удаляются все символы, начиная с указанного, и до конца строки. Если второй параметр превышает длину строки, из которой удаляется подстрока (т.е. Length (St)<N), в этом случае ни один символ из строки не будет удален. При решении многих задач используется не вся строка, а только ее часть (подстрока). Выделить подстроку из строки можно с помощью функции типа String. Copy (St,N,Kol), копирующий из строки St Kol символов, начиная с символа с номером N. Строка St не изменяется. Если в строке, начиная с указанной позиции, количество символов меньше, чем требуется, скопировать (Length (St)-N+1<Kol), функцией возвращается реально существующая часть строки.
|