Строки, состоящие из одного символа, считаются константами типа char. Например, 'a', 'A', '1', '=' .
Строки, состоящие из n символов, считаются константами типа
array[1..n] of char.
По отношению к символьным массивам действуют в основном те же правила, что и по отношению к числовым массивам. В частности, присваивание A:=B допустимо лишь в том случае, когда типы массивов A и B тождественны.
Пример 1.
TypeAr1 = array[1..10] of char;
Ar2 = array[1..10] of char;
Ar3 = Ar1;
Var A : Ar1; B : Ar2; C : Ar3;
Begin
......................
B:=A; C:=A;
Здесь оператор C:=A будет считаться корректным, а для оператора B:=A компилятор выдаст сообщение «Type mismatch».
Тем не менее имеются и отличия в обработке символьных и числовых массивов.
В частности, символьному массиву можно присвоить значение строки символов, если количество символов в строке и объявленный размер символьного массива одинаковы. Например, для предыдущего примера првильным будет воспринят оператор A:=’0123456789’, а для операторов B:=’01234567’ и C:=’0123456789012’ будет выдано сообщение «Type mismatch».
Для символьных массивов допустимы также операции отношения. Такие операции выполняются слева направо до тех пор, пока не встретятся два неодинаковых символа. Если длины массивов различные, то более короткий дополняется символом #0.
Пример 2.
Var p : boolean;
A,B,C : array[1..8] of char;
Begin
A:='ABCDEFGH'; B:='ABCDXYZV';
p:=A<C;
В данном случае получим p = false.
Пример 3. Слова в тексте разделены одним или несколькими пробелами. Определить, сколько слов оканчиваются буквой 'а'.
Program Letter;
Const Nmax = 60;
Var i,k,n : integer;
Tex : array[1..Nmax] of char;
Begin
Read(n);
For i:=1 to n do{ Ввод текста }
Read(Tex[i]); { по одному символу }
For i:=1 to n do { Вывод текста }
Write(Tex[i]); { по одному символу }
Writeln;
k:=0;
For i:=1 to n-1 do
If (Tex[i]='a') and (Tex[i+1]=' ') then
Inc(k);
If Tex[n]='a' then
Inc(k);
Writeln('k= ',k);
End.
Поскольку текст - это массив символов, то ввод и вывод такого текста осуществляется поэлементно, по одному символу.
Пример 4. Даны два слова одинаковой длины. Определить, состоят ли эти слова из одних и тех же букв. Например, 'СОСНА' = 'НАСОС', но 'СОСНА' ¹ 'НАНОС', так как в слове 'СОСНА' две буквы 'С', а в слове 'НАНОС' - только одна такая буква.
Обозначим заданные слова именами Slovo1 и Slovo2. Будем выбирать по одной букве из Slovo2 и последовательно сравнивать выбранную букву со всеми буквами в Slovo1. Если i-ая буква в Slovo2 равна j-ой букве в Slovo1, то j-ую букву первого слова заменяем на пробел (чтобы эта буква больше не анализировалась при наличии в Slovo2 повторяющихся букв). Если равенство Slovo1[j] = Slovo2[i] не обнаружено, дальнейшая проверка должна быть прекращена.
Обычно в программах не рекомендуется искажать исходные данные (в данном случае в процессе работы программы стираются буквы в Slovo1). Поэтому сравнение Slovo2 будет производиться с буферным (рабочим) словом SlovoBuf, в которое на стартовом участке программы копируется значение Slovo1.
ProgramSlovo;
Constn = 20;
Var i,j : byte;
Cond : boolean;
Slovo1,Slovo2,SlovoBuf : array[1..n] ofchar;
Begin
Ввод и печать Slovo1,Slovo2
SlovoBuf:=Slovo1;
Fori:=1 to n do
Begin
Cond:=false;
For j:=1 to n do
If Slovo2[i]=SlovoBuf[j] then
Begin
SlovoBuf[j]:=' '; Cond:=true;
Break;
End;
If not Cond then
Break;
End;
IfCond then
Writeln('Слова имеют одинаковые буквы')
Else
Writeln('Слова имеют различные буквы');
End.
Здесь следует обратить внимание на то, что каждый оператор Break осуществляет выход лишь за пределы того цикла, в котором он сам находится.