Процедуры и функции для работы со строками Length(s) • Функция, возвращает длину строки s … var s:string; m:integer; … readln(s); s=‘длина’ m:=length(s); m= 5 Concat(s1,s2,…,sn) • Функция, возвращает строку, представляющую собой объединение строк s1, s2,…,sn … var s,s1,s2:string; … s1:=‘все учат информатику’; s2:=‘ и делают домашнюю работу’; s:=concat(s1,s2) все учат информатику и делают домашнюю работу Copy(s,i,c) • Функция, возвращает подстроку строки s, начиная с позиции i и состоящую из с символов … var s1,s2:string; … s1:=‘все учат информатику’; s2:=copy(s1,10,10)+’a’; writeln(s2); информатика Delete(s,i,c) • Процедура, удаляет из строки s с символов, начиная с позиции i … var s,s1,s2:string; … s1:=‘все учат информатику’; s2:=‘ и делают домашнюю работу’; delete(s1,5,16); delete(s2,1,3); все делают работу delete(s2,7,9); s:=concat(s1,s2); Insert(s1,s,i) • Процедура, вставляет подстроку s1 в строку s, начиная с позиции i … var s1:string; … s1:=‘все учат информатику’; insert(‘старательно ’,s1,5); все старательно учат информатику Pos(s1,s) • Функция, возвращает позицию первого вхождения подстроки s1 в строку s или 0, если s не содержит подстроки s1. … var s1:string;k:integer; … s1:=‘все учат информатику’; writeln(pos(‘все’,s1)); 1 Str(i,s) и Val(s,i,code) • Str(i,s) - процедура, преобразует число i в строку. Результат записывает в s • Val(s,i,code) – процедура, преобразует строку s к числу, тип которого соответствует переменной i. Результат записывается в переменную i. Если преобразование прошло успешно, в переменную code записывается значение 0, иначе записывается номер символа, для которого возникла ошибка при преобразовании типов. Str(i,s) и Val(s,i,code) … var s:string;k:integer;l:real; … str(123,s); s=‘123’ val(’12.3’,l,k); l=12.3, k=0 val(’12,3’,l,k); l=0, k=3 Пример №1. Что будет напечатано программой? program ex1; var s,a:string;i:byte; begin s:='123'; a:=''; for i:=1 to length(s) do a:=s[i]+a+s[i]; writeln(a); end. 321123 Пример №2. Что будет напечатано программой? program ex2; var s,a:string;i:byte; begin s:='123'; a:=''; for i:=length(s) downto 1 do a:=a+s[i]+a; writeln(a); end. 3231323 Пример №3. Что будет напечатано программой? program ex3; var s:string;i:byte; begin s:=‘кол около колокола'; i:=pos(‘оло’,s); while i<>0 do begin delete(s,i,3); i:=pos(‘оло’,s); end; writeln(s); end. кол ок ккола удалились все сочетания «оло» Пример №4. Найти ошибки в программе program ex4; кл кл клкла var s:string;i:byte; a:string; begin s:= 'кол около колокола'; a:=''; i:=1; while i<=length(s) do while i<=length(s) do begin if s[i]<>'o' if s[i]<>'o' then a:=a+s[i]; then a:=a+s[i] else i:=i+1; i:=i+1; writeln(a); end; end. Задание 1 • Путем «вырезок» и «склеек» получить из исходного слова данные слова : • вертикаль – тир, ветка • программа – ром, рампа • апельсин – спаниель • яблоко – блок, око Задание 2 Выполните задания, не используя операторы цикла, а используя только процедуры и функции для работы со строками. Задание сделать на компьютере, записать в тетрадь: 1. Дано слово из четного числа букв. Вывести на экран его первую половину, не используя оператор цикла; 2. Дано слово из нечетного числа букв. Вывести на экран его первую половину, включая среднюю букву, не используя оператор цикла; 3. Вывести на экран последовательность символов, расположенных перед первым ‘:‘ 4. Вывести на экран последовательность символов, расположенных после первого ‘:‘ 5. Вывести на экран последовательность символов, расположенных после второго ‘:‘ 6. Если длина слова четная, то вставить в середину слова букву «а», в противном случае удалить среднюю букву; 7. Сравнить и вывести, какая половина слова стоит по алфавиту раньше, первая или вторая. Решение №№ 1,2,3,4 1. writeln(copy(s,1,length(s) div 2); 2. delete(s,length(s) div 2+2,length(s) div 2); writeln(s); 3. writeln(copy(s,1,pos(‘:’,s)-1)); 4. delete(s,1,pos(‘:’,s)); writeln(s); Решение №№ 5,6,7 5. k:=pos(‘:’,s); delete(s,1,k); k:=pos(‘:’,s); delete(s,1,k); writeln(s); 6. if length(s) mod 2 = 0 then insert(‘a’,s,length(s) div 2 +1) else delete(s,length(s) div 2+1,1); writeln(s); 7. s1:=copy(s,1,length(s) div 2); s2:=copy(s,length(s) div 2+1, length(s) div 2); if s1<s2 then writeln(‘первая половина раньше’) else if s1>s2 then writeln(‘вторая половина раньше’) else writeln(‘половины равны’); Пример №5. Подсчитать, сколько раз данный символ встречается в данной строке program ex5; var s:string;c:char;k,i:byte; begin readln(s);readln(c); k:=0; i:=pos(c,s); while i<>0 do begin k:=k+1; delete(s,i,1); i:=pos(c,s); end; writeln(k); end. Пример №6. Удалить из заданной строки все цифры. program ex6; var s, digit :string; i :byte; begin readln(s); digit:=‘0123456789’; i:=1; while i<=length(s) do if pos(s[i],digit)<>0 then delete(s,i,1) else i:=i+1; writeln(s); end. Задание 3 1. Подсчитать общее количество двух заданных символов в строке 2. Подсчитать количество гласных букв 3. Подсчитать количество согласных букв 4. Удалить в строке данную подстроку 5. Заменить в строке все подстроки одного вида на подстроки другого вида