
Лекция 07-строки.ppt
- Количество слайдов: 11
ОБРАБОТКА СИМВОЛЬНОЙ ИНФОРМАЦИИ Типы для представления символьной информации char - один символ (из таблицы ASCII) string - строка символов как целое. С позиций обработки строка может рассматриваться также и как массив символов, индексированный числами 1, 2, 3, . . . В отличие от массивов типа Array длина строки переменная и может быть нулевой (пустая строка) или иметь любое значение до max=255. Фактическая длина строки определяется в момент ее инициализации.
Обработка информации типа CHAR Запись констант: ‘d’ или #68 (#68 – номер 68 в таблице ASCII) Объявление переменных: var sym : char; arr : array[1. . 12] of char; Операции: • 6 операций отношения : <, <=, =, <>, >=<, > • chr(<число целое>) – символ из таблицы ASCII • ord(<символ>) – номер в таблице ASCII • ввод – read(<имя переменной типа char> ) readkey – читать код нажатой клавиши без эхо-печати • вывод – write(<символ>) Для обработки массива (array) символов, можно использовать алгоритмы обработки массивов числовой информации, рассмотренные ранее.
Обработка строк Строка - цепочка символов, ASCII--код каждого из которых располагается в отдельном байте. Длина строки - число символов в ней. Максимальная длина - 255 символов, минимальная - 0 (пустая строка) Запись констант: ’Это строка символов’ - (может содержать любой символ ASCII) ‘O’’key’ - (константа, изображающая слово «O’key» ) Варианты объявления переменной типа "строка": var city, s 1, s 2 : string; {строка произвольной длины} name : string[20]; {строка, содержащая не более 20 символов} Операции: • • 6 операций отношения : <, <=, =, <>, >=<, > операция конкатенации : + (‘не’ + ‘удача’ = > ‘неудача‘) ввод – read, readln (<переменная> ) вывод – write(<переменная или константа>)
Процедуры и функции для работы со строками • Длина строки – число символов в ней function Length(s: string): integer; • Выделить подстроку: function Copy (S: string, NB, Len: integer): string; • Найти подстроку в строке: function Pos (Sub. Str, Str: string): integer; • Вставить подстроку в строку: procedure Insert (Sub. Str: string; var Str: string; k: integer); Здесь k - позиция c которой должна быть вставлена подстрока • Удалиь подстроку: procedure Delete (var S: string; NBy, Len: integer) Здесь NBy - позиция первого символа подстроки Len - количество удаляемых символов • Преобразовать числовое значение (V) в строку: procedure Str(V: <числовой тип>; S: string); Здесь V может быть любого разрешенного в языке числового типа, как целого, так и вещественного. • Преобразование строки в числовое значение Val(s: string; v: <числовой тип>; code: integer); Здесь code – код завершения { 0 – успех; <>0 – неудача }
Иллюстрации var Name, Full. Name : string; begin Full. Name : = 'John Brown'; Name: =copy(Full. Name, 6, 2); Full. Name : = 'John Brown'; P : = Pos('Br', Full. Name); {Результат : в переменной Name записано 'Br’} {Результат : P = 6} Insert('Peter ', Full. Name, 6); {Результат: 'John Peter Brown’} Delete(Full. Name, 3, 2); {Результат: 'Jo Peter Brown'} Str(25, S); {Результат: S=’ 25’} x: =25 e 2; Str(x: 10: 2, S); { Результат: ’ 2500. 00’} { : 10: 2 – формат результирующей строки }
Пример 1. Удалить все пробелы в начале и конце строки var st: string; begin st: =' Иванов Сергей '; {Удалить все пробелы в начале строки} while st[1]=' ' do {Первый символ строки - пробел} st: =Copy(st, 2, Length(st)-1); {end while} writeln('<', st, '>'); {Удалить все пробелы в конце строки} while st[Length(st)]=' ' do {Последний символ строки - пробел} Delete(st, Length(st), 1); {end while} writeln('<', st, '>'); end. {Результат первого цикла: <Иванов Сергей > { Результат второго цикла: <Иванов Сергей> } }
Пример 2. Подсчитать число вхождений символа «а» в строку { Использован алгоритм А 6 обработки массивов } var st : string; I, k : integer; begin st : = 'Исходная строка содержит несколько букв <а>'; k : = 0; for I : = 1 to Length(st) do if st[i]='а' then k: =k+1; {end if} {end for} {Результат : k = 3} end.
Пример 2 а. Подсчитать число вхождений символа «а» в строку (вариант 2) { Использована функция «pos» } var st: string; {Исходная строка} stwork: string; {Рабочая переменная} p: integer; {Позиция первого вхождения символа в строку} k: integer; {Количество найденных символов} begin st: ='Исходная строка содержит несколько букв <а>'; k : = 0; stwork: =st; p: =Pos('а', stwork); while p>0 do begin k: =k+1; stwork: =Copy(stwork, p+1, 255); {Скопировано будет не 255 символов, а оставшаяся часть строки, начиная с позиции <p+1>} p: =Pos('а', stwork); end; {Результат : k=3 } end.
Пример 3. Сформировать новую строку из исходной, оставив в ней строго по одному пробелу между словами. var st: string; {Исходная строка} stnew: string; {Формируемая строка} i: integer; blank: boolean; { true – если пробел первый, false – если пробел не первый } begin st: =' Иванов Сергей '; blank: =false; stnew : = ''; {Строка пустая} for i: =1 to Length(st) do if st[i]<>' ' then begin stnew: =stnew+st[i]; blank: =false; end else if (not blank) then begin blank: =true; {первый пробел} stnew: =stnew+st[i]; end; {end for} writeln('<', stnew, '>'); end. {Результат : < Иванов Сергей >}
Пример 4. Ввод строки вида "Фамилия число" var st : string; name : string; number, p, code : integer; begin write. Ln('введите фамилию и возраст в одной строке'); write ('=> '); readln (st); p : = Pos(' ', st); name : = Copy( st, 1, p-1); {сохранить фамилию} Delete( st, 1, p); while (st[1] = ' ') do Delete(st, 1, 1); {end} while (st[Length(s)]=' ') do Delete(st, Length(s), 1); {end} Val( st, number, code); {если code = 0 переменной number присвоено значение иначе число в строке записано в недопустимой форме}
Дома: 1. Прочитать главу 8 из конспекта 2. Решить задачи 4, 5, 8 Текст задачи 8 Задана строка текста на русском языке. Разделителями считать пробел, запятую, точку. Напечатать все слова, содержащие корень, введенный с клавиатуры.
Лекция 07-строки.ppt