1 Строковый тип данных Строка – это последовательность символов определенной длины (от 0 до 255).
Описание переменной строкового типа Var Str1:String[30]; Str2:String; Str1 – переменная строкового типа с максимальной длиной строки 30 символов. Если размер не указан, то максимальный размер автоматически принимается равным 255. Для строки из n символов в памяти отводится n+1 байт; n байтов – для хранения символов строки, и один дополнительный (0) – для значения текущей длины строки. Например, sadr: string[16] = Ул. Чапаева, 5 Номер байта Его значение 14 Ул.Чапаева,5
3 Переменная строкового типа Строка похожа на одномерный массив символов: она имеет определенную длину, к каждому символу можно обратиться как к элементу одномерного массива Str1: array [0..n] of char; Аналогично: Str1[i] – это обращение к i-му элементу строки Str1. Внимание! Переменная тип String вводится и выводится не поэлементно, как массив, а сразу целиком.
4 Операции со строками операция сцепления (склеивание) - последовательное объединение нескольких строк. Знак операции – +. Var str1, str2,str3:String[20]; … Str1:=У Егорки; Str2:=всегда отговорки; Str3:=Str1+ +Str2; Строка Str3 имеет значение У Егорки всегда отговорки. То же самое получим в результате: Str3:=Str1+ всегда+ отговорки; (или) Str3:=Concat (Str1,,Str2);
5 Сравнение Сравнение двух строк происходит посимвольно слева направо: сравниваются коды соответствующих символов до тех пор, пока не нарушится равенство при этом сразу делается вывод о знаке неравенства. Две строки называются равными, если они равны по длине и совпадают посимвольно. Balkon < balkon { Ord( B ) < Ord( b )} balkon > balken { Ord( o ) < Ord( e )} balkon > balk {длина первой строки больше} кошка > кошка {длина первой строки больше} Кот = Кот { равны по длине и совпадают посимвольно} Результат этих операций – одно из значений: True или False
6 Стандартная процедура Удаление delete(Str,n,m) – вырезает из строки Str m символов, начиная с n-го, таким образом строка изменяется. Пример. Дан фрагмент программы: str1:=ABCDEFGH; delete(str1,3,4); writeln(str1); После выполнения этих операторов из строки будут удалены 4 символа, начиная с третьего. Будет напечатано: ABGH
7 Стандартная процедура Вставка insert(Str1,Str2,n) – вставка строки Str1 в строку Str2, начиная с n-го символа, при этом Str1 остается такой же, Str2 получит новое значение. Пример. Дан фрагмент программы: str1:=ABCDEFGH; str2:=abcdefgh; insert(str1,str2,3); writeln(str1); После выполнения этих операторов: str1:=abABCDEFGHcdefgh;
8 Стандартная функция Копирование copy(Str,n,m) – копирует m символов строки Str, начиная с n-го символа, при этом исходная строка не меняется. Результат этой функции можно присвоить другой строке или сразу выводить его на экран. Пример. Дан фрагмент программы: str1:=ABCDEFGH; str2:=abcdefgh; str3:=Copy(str1,4,3); writeln(str3); writeln(Copy(str2,4,3)); После выполнения этих операторов на экран будет выведено: DEF def
9 Стандартная функция Длина строки Length(Str) – определяет количество введенных символов в строке. Результат – целое число. Пример. Дан фрагмент программы: str1:=ABCDEFGH; str2:=Мама мыла раму.; k1:=Length(str1); k2:=Length(str2); После выполнения этих операторов переменные: k1=8, k2=15.
10 Стандартная функция Подстрока Pos(Str1,Str2) – определяет номер первого элемента, с которого начинается первое вхождение подстроки str1 в строку str2. Результат – целое число. Если такой подстроки нет, то значение функции равно 0. Пример 1. Дан фрагмент программы: str1:=CDE; str2:=ABCDEFGH; k1:=pos(str1,str2); k2:= pos(str2,str1); После выполнения этих операторов переменные: k1=3, так как строка str1 встречается в строке str2 с 3-го символа k2=0, так как такой подстроки нет. Пример 2. k1:=Pos(ша,Наша Маша громко плачет.); k1 равно 3. Выбирается номер 1-го элемента 1-й встречи.
11 Числа и строки Число 13 и строка 13 – это не одно и то же. Для работы с числами и строками применяются две процедуры.
12 Стандартная процедура Str(N,st1) – переводит числовое значение N (целое или вещественное) в строковое и присваивает результат строке st1. Примеры: Str(1234,st1) – после выполнения st1=1234; Str( ,st1) – результат – st1= ; Str( е+2,st1) – в итоге: st1= е+2;
13 Стандартная процедура Val(st1,N,k) – переводит строковое значение в числовое, если данная строка действительно является записью числа (целого или вещественного), то значение k=0,а N – это число, иначе k будет равно номеру символа, в котором встречается первое нарушение записи числа N. Примеры: Val(1234,n,k) – n=1234, k=0; Val( ,n,k) – n= , k=0; Val( е+2, n,k) – n= е+2, k=0; Val(12-45, n,k) – k=3; (знак - может быть только на первом месте) Val(2,567m, n,k) – k=2; (целая и дробная части разделяются точкой) Val(5.87c-5, n,k) – k=5; (символ c не допустим в записи числа)
14 Задачи 1.Сколько раз в данной строке встречается символ a. 2.Сколько раз встречаются гласные буквы? 3.Заменить все вхождения подстроки st1 на подстроку st2, которые вводятся с клавиатуры. 4.Строка состоит из нескольких слов. Между словами стоит один пробел, в конце предложения – точка. Посчитать количество слов и вывести на экран только те из них, которые начинаются с буквы а (слов не более 30). 5.Строка содержит одно слово. Проверить, читается ли оно одинаково справа налево и слева направо (т.е. является ли оно палиндромом)
15 6.Дана строка. Определить, сколько раз входит в нее подстрока abc. 7.Дана строка. Посчитать количество букв k в последнем ее слове. 8.Дана строка. Указать те слова, которые содержат хотя бы одну букву k. 9.В строке удалить символы двоеточия и подсчитать количество удаленных символов. 10.Удалить часть символьной строки, заключенной в скобки (вместе со скобками). 11.В записи слова зашифрованы – каждое из них записано наоборот. Расшифровать сообщение. 12.Проверить, одинаковое ли число открывающих и закрывающих скобок в данной строке.
16 13.Дана последовательность слов. Напечатать все слова, отличные от слова hello. 14.Дана последовательность слов. Напечатать все слова в алфавитном порядке. 15.Дана последовательность слов. Напечатать все слова последовательности, которые встречаются в ней по одному разу. 16.Составить программу вывода самой большой цифры в записи заданного числа. 17.Найти сумму всех чисел строки. 18.В заданной строке удалить все лишние пробелы. 19.В строке имеется одна точка с запятой. Подсчитать количество символов до точки с запятой и после нее.
17 program ctroka; const n=30; type mas_str=array[1..n] of string; var A:mas_str; str:string; k:byte; i:integer; procedure Init(var b:mas_str); {формирует массив из отдельных слов} begin k:=1; b[k]:=''; {пока не встретится пробел формируем очередное слово k, прибавляя по одной букве} For i:=1 to length(str)-1 do If str[i]' then b[k]:=b[k]+str[i] else {если это не последний символ, то увеличиваем счетчик слов и {начинаем формировать соответствующий элемент массива} If i length(str)-1 then begin Inc(k); b[k]:='' end; end; begin writeln(Введите предложение'); readln(str); Init(A); writeln(Всего слов: ',k); {просматривая слова в массиве, выводим те, которые начинаются с a} For i:=1 to k do If A[i][1]=a' then write(A[i],' '); readln end. Какую задачу решает данная программа? (Впишите комментарий)
function Sum(st:string):integer; { находит сумму всех цифр данной строки } var i,k,d:byte; s:integer; begin s:=0; for i:=1 to length(st) do begin val(st[i],d,k); if k=0 then s:=s+d; end; sum:=s; end; function simv(st:string):byte; { находит количество символов a в строке } var i,k:byte; begin k:=0; for i:=1 to length(st) do if st[i]='a' then inc(k); simv:=k; end; procedure ins(var st:string); { заменяет все вхождения подстроки } var k:byte; { 'del' на 'insert } begin while pos('del',st)0 do begin k:=pos('del',st); delete(st,k,length('del')); insert('insert',st,k); end; end; Какие задачи решают данные подпрограммы? (Впишите комментарий)