Работа со строковыми переменными, страница 2

Pred(c:char):char - получение символа, предшествующего заданному; (но нет Pred(#0));

Succ(c:char):char - получение символа, следующего за заданным; (но нет Succ(#255));

Операции над символами:

- присваивание; три способа  присвоить  значение  символьной переменной: с:='A'; c:=#65; c:=Chr(65);

- сравнение (по коду):    'R'='R'   'Q'<'R'   'R'<'r'

Символьные строки,  как и числа,  можно сравнивать между собой и использовать эти равенства и неравенства в качестве  условий в циклах и развилках.

Равными считаются строки одинаковой длины (не по  описанию, а фактически), у которых все символы, стоящие на соответствующих местах, одинаковы. Например, строки text_1 и text_2 равны, если

text_1 = 'Я вас любил!' ,  text_2 = 'Я вас любил!'.

В  следующих случаях строки text_1 и text_2 не равны:

text_1 = 'Я вас любил!' ,  text_2 = 'Я Вас любил!' ;

text_1 = 'Я вас любил!' ,  text_2 = ' Я  вас  любил!';

text_1 = 'Я вас любил!' ,  text_2 = 'Я вас любил ...'.

(Попробуйте определить, почему эти строки не равны).

Более того,  можно использовать при сравнении строк знаки >

(больше) и < (меньше). Одна строка считается больше другой, если в словаре (где слова расположены по алфавиту) она  стоит  дальше от  начала.  Если первые буквы строк совпадают,  то сравниваются вторые,  затем третьи и т.д.  Строчные буквы расположены в таком воображаемом "словаре" после заглавных,  а русские после латинских.

Что касается цифр и прочих символов,  которые могут входить в строки, можно руководствоваться общим правилом. Каждый символ, который  можно набрать на клавиатуре,  имеет свой код,  эти коды можно посмотреть в специальной таблице,

На компьютерах IBM PC принят код,  называемый ASCII.

Символьные строки можно "склеивать" между  собой  с  помощью операции "+" (ее принято называть операцией конкатенации

(объединение)).

Например, выполнение группы операторов

a1 := 'ма'; a2 := 'шина';

b := a1 + a2;

приведет к тому,  что переменной b будет присвоено значение 'машина'.

5. Встроенные функции для обработки строк

Length(Str) - функция, котоpая вычисляет  текущую  длину  (в символах) стpоки Str. Pезультат имеет целочисленный  тип. Текущая длина стpоки содеpжится также в коде символа Str[0].

Copy(St,K,J) - функция,котоpая выделяет из St подстpоку из J

символов, начиная с позиции K. Если K>Length(St),  то pезультатом будет пустая строка.

Pos(S,St) - функция, котоpая опpеделяет  наименьший  номеp

элемента в St, начиная с котоpого S входит в  St  как  подстpока.

Если в St не найдено S, то pезультат pавен нулю.  Pезультат имеет тип byte.

Concat(str1,str2,..) - функция, выполняющая объединение всех строк, указанных в качестве аргументов. Количество аргументов может быть любым.

6. Встроенные процедуры для обработки строк

Delete(Str,K,J) - пpоцедуpа, котоpая удаляет из стpоки Str J

символов, начиная с K-го. Pезультатом  является  стpока  Str  без удаленной подстpоки. Если K больше  размера  строки,  символы  не удаляются.

Insert(Str1,Str2,K) - пpоцедуpа,  котоpая  вставляет  стpоку

Str1 в стpоку Str2, начиная с позиции K.  Если  полученная  в pезультате стpока Str2 пpевышает 255 символов, то все лишние символы (начиная с 256) отбpасываются.

Str(x,st) - процедура, которая преобразует  число  X вещественного или целого типа в последовательность  символов.  Число  X

может быть указано с форматом, аналогичным формату вывода  в процедуре Write, например:   Str(x:8:3,st).

Val(st,x,Code) - процедура, которая  преобразует  символьное представление числа в числовое значение, соответствующее типу переменной x (вещественному или целому). Переменная Code:integer

служит для контроля правильности выполнения преобразования (Code=0)

или ука зания номера ошибочного символа (Code<>0).

Пр1.

Дана строка. Подсчитать общее число символов +,-,* в данной строке.

Program St1;

const n=10;

var s:string[n];

I,m: integer;

begin

writeln ('введите строку символов, не более 10');

readln(s);

m:=0;    {счетчик колличества символов +, -, *}

for i:=1 to length(s) do

if (s[i]='+') or(s[i]='-') or (s[i]='*') then m:=m+1;

write ('m=', m);

end.

Пр 2.

Дана строка из 20 символов. Удалить  в  ней  все  пробелы  и  выделить подстроку, которая в ней содержиться  после первого символа ';'.

Program St2;

var stroka:string[20];

I: integer;

begin

writeln ('введите строку символов, не более 20');

readln(stroka);

i:=1;

while (i>0) do

begin

i:=pos('',stroka);{Поиск  подстроки ' '  в  stroka,  результат число, т.е. определяется номер элемента, начиная с которого

' ' входит в  stroka}

if i>0 then delete(stroka,i,1) {удаляет один  элемент,  стоящий  на

i-ом месте}

end;

i:=pos(';',stroka);   {поиск ':' в строке }

if i>0 then writeln ('подстрока после ; будет такая:',

copy(stroka,i+1,length(stroka)-i))   {выделяет из строки

length(stroka)-i) -элементов, начиная с i+1}

else writeln ('такой подстроки нет');

end.