Процедуры и функции для работы со строками

advertisement
Процедуры и функции для
работы со строками
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. Заменить в строке все подстроки одного вида на подстроки
другого вида
Download