Строки в Pascal
Для обработки текстов в Паскале широко используется тип STRING (строка). Он во многом похож на одномерный массив символов ARRAY [0..N] OF CHAR, однако, в отличие от последнего, количество символов в строке может меняться от 0 до 255.
Самый первый байт в строке имеет индекс 0 и содержит текущую длину строки. Первый значащий символ строки занимает второй байт и имеет индекс 1.
Вce действия над строками и символами реализуются с помощью описываемых ниже стандартных процедур и функций.
СONCAT(S1 [,S2,...,SN])- функция типа STRING;возвращает строку, представляющую собой сцепление строк—параметров S1,S2, ... ,SN.
COPY(ST, INDEX, COUNT) - функция типа STRING; копирует из строки ST COUNT символов, начиная с символа с номером INDEX.
DELETE(ST, INDEX, COUNT) - процедура; удаляет COUNT символов из строки ST, начиняя с символа с номером INDEX.
INSERT(SUBST,ST,INDEX) -процедура; вставляет подстроку SUBST в строку ST, начиная с символа с номером INDEX.
LENGTH(ST) - функция типа INTEGER: возвращает длину строки ST.
POS (SUBST, ST) — функция типа INTEGER: отыскивает в строке ST первое вхождение подстроки SUBST и возвращает номер позиции, c которой она начинается; если подстрока не найдена, возвращается ноль.
STR(X [:WIDTH [:DECIMALS] ],ST) - процедура; преобразует число Х любого вещественного или целого типов в строку символов ST так, как это делает процедура WRITELN перед выводом; параметры WIDTH и DECIMALS, если они присутствуют, задают формат преобразования: WIDTH определяет общую ширину поля, выделенного под соответствующее символьное представление вещественного или целого числа X, a DECIMALS - количество символов в дробной части (этот параметр имеет смысл только в том случае, когда Х — вещественное число).
VAL(ST,X,CODE)- процедура; преобразует строку символов ST в целое или вещественное число X; параметр CODE содержит ноль если преобразование прошло успешно, и тогда в Х помещается peзyльтат преобразования, в противном случае он содержит номер позиции в строке ST, где обнаружен ошибочный символ, и в этом случае содержимое Х не меняется.
UPCASE(CH) - функция типа CHAR; возвращает для символьного выражения СН, которое должно представлять собой строчную латинскую букву, соответствующую заглавную букву; если значением CH является любой другой символ (в том числе строчная буква русского алфавита), функция возвращает его без преобразования.
ORD(s) – функция типа INTEGER;возвращающая ASCII код символа S.
CHR(n) - функция типа CHAR; возвращающая символ по его ASCII коду N.
1.Получить новый текст соединением имеющихся текстов.
var st1,st2,st3,st4,st:string;
n,k,i:integer;
Begin
st1:='Мы пришли';
st2:='в школу';
st3:='№ 1';
st4:=' ';
st:=concat(st1,st4,st2,' ',st3); {Объединение текстов}
writeln(st);
End.
2. Вводиться строка ST. Вычислить её длину.
var st:string;
n:integer;
Begin
writeln('Введите строку');
readln (st);
n:=length(st);
writeln('Длина строки =',n);
End.
3. Подсчитать количество букв «а» в тексте (русских и латинских).
program zadacha5_3;
var t:string;
b:string[1];
n,k,i:integer;
Begin
writeln('Введите текст'); readln(t);
n:=length(t); {Вычисление длины текста}
k:=0;
for i:=1 to n do
begin
b:=copy(t,i,1); {Вырезка одного символа}
if (b='a')or(b='A')or(b='а')or(b='А')
then k:=k+1; {Сравнение символа с буквой а}
end;
writeln('k=',k);
End.
Данную задачу можно решить и с неявным использованием команды copy()
var t,b:string;
n,k,i:integer;
Begin
writeln('Введите текст');
readln(t);
n:=length(t);
for i:=1 to n do
begin
b:=t[i];
if (b='a')or(b='A')or(b='а')or(b='А')
then k:=k+1;{Сравнение символа с буквой а}
end;
writeln('k=',k);
End.
4.В данном тексте заменить все слога “ма” на “па”.
var t:string;
n,k,i:integer;
Begin
writeln('Введите текст');
readln(t);
n:=length(t);
for i:=1 to n-1 do
if copy(t,i,2)='ма' then
begin
delete(t,i,2);
insert('па',t,i);
end;
writeln('t=',t);
End.
5. Дано слово. Проверить является ли оно перевёртышем (палиндромом).
Например
мама амам : не является
алла алла : является
(для решения задачи сформируем перевёртыш, а потом сравним равно ли исходное слово перевёртышу)
var t,sl,per:string;
n,k,i:integer;
Begin
writeln('Введите слово'); readln(sl);
n:=length(sl);
i:=n;per:='';
while i0 do
begin
per:=per+copy(sl,i,1);
i:=i-1;
end;
if sl=per then t:='является'
else t:='не является';
writeln('слово ',sl,'-',t,' перевёртышем');
End.
6. Дано число (от 1 цифры до 255 цифр). Найти сумму цифр этого числа.
var t:string;
sim:string[1];
i,n:word;
code,s,cifra:integer;
Begin
writeln('Введите число’);
readln(t); {Вводим число как текст}
n:=length(t);
s:=0;
for i:=1 to n do
begin
sim:=copy(t,i,1); {Вырезка символа}
val(sim,cifra,code); {Паревод в числовой формат}
s:=s+cifra;
end;
writeln('Сумма цифр числа ',t,' = ',s);
End.
7. Выдать на экран кодировочную таблицу.
var
i:integer;
Begin
for i:=0 to 255 do
write(chr(i),' ');
End.
8. Выдать на экран символ по введённому ASCII коду.
var
sim:char ;
kod:byte;
Begin
writeln('Введите символ');
readln(sim);
writeln('Код символа - ',sim,': ',ord(sim));
End.
9. Имеется двухмерный массив, все элементы которого являются словами. Вычислить сколько раз в массиве встречается слово ‘лес’.
const n=3;
a:array[1..n,1..n] of string=(('лес','луг','поле'),
('степь','тайга','лес'),
('лес','саванна','прерия'));
var
i,j,k:byte;
Begin
k:=0;
for i:=1 to n do
for j:=1 to n do
if a[i,j]='лес' then inc(k);
writeln('Кол-во слов ЛЕС = ',k);
End.