Использование символьных и строковых величин в среде программирования Pascal

Символьный тип

Символьный тип char занимает 2 байта и хранит Unicode-символ. Символы реализуются типом System.Char платформы .NET.

Операция + для символов означает конкатенацию (слияние) строк. Например: 'a'+'b' = 'ab'. Как и для строк, если к символу прибавить число, то число предварительно преобразуется к строковому представлению:

var s: string := ' '+15; // s = ' 15'

var s1: string := 15+' '; // s = '15 '

Над символами определены операции сравнения < > <= >= = <>, которые сравнивают коды символов:

'a'<'b' // True

'2'<'3' // True

Для преобразования между символами и их кодами в кодировке Windows (CP1251) используются стандартные функции Chr и Ord:

Chr(n) - функция, возвращающая символ с кодом n в кодировке Windows;

Ord(с) - функция, возвращающая значение типа byte, представляющее собой код символа c в кодировке Windows.

Для преобразования между символами и их кодами в кодировке Unicode используются стандартные функции ChrUnicode и OrdUnicode:

ChrUnicode(w) - возвращает символ с кодом w в кодировке Unicode;

OrdUnicode(с) - возвращает значение типа word, представляющее собой код символа c в кодировке Unicode.

Кроме того, выражение #число возвращает Unicode-символ с кодом число (число должно находиться в диапазоне от 0 до 65535).

Аналогичную роль играют явные преобразования типов:

char(w) возвращает символ с кодом w в кодировке Unicode;

word(с) возвращает код символа c в кодировке Unicode.

Подпрограммы для работы с символами

function Chr(a: word): char;

Преобразует код в символ в кодировке Unicode

function ChrAnsi(a: byte): char;

Преобразует код в символ в кодировке Windows

function ChrUnicode(a: word): char;

Преобразует код в символ в кодировке Unicode

procedure Dec(var c: char);

Уменьшает код символа c на 1

procedure Dec(var c: char; n: integer);

Уменьшает код символа c на n

procedure Inc(var c: char);

Увеличивает код символа c на 1

procedure Inc(var c: char; n: integer);

Увеличивает код символа c на n

function LowCase(ch: char): char;

Преобразует символ в нижний регистр

function LowerCase(ch: char): char;

Преобразует символ в нижний регистр

function Ord(a: char): word;

Преобразует символ в код в кодировке Unicode

function OrdAnsi(a: char): byte;

Преобразует символ в код в кодировке Windows

function OrdUnicode(a: char): word;

Преобразует символ в код в кодировке Unicode

function Pred(x: char): char;

Возвращает предшествующий x символ

function Succ(x: char): char;

Возвращает следующий за x символ

function UpCase(ch: char): char;

Преобразует символ в верхний регистр

function UpperCase(ch: char): char;

Преобразует символ в верхний регистр

Строковый тип

Строки имеют тип string, состоят из набора последовательно расположенных символов char и используются для представления текста.

Строки могут иметь произвольную длину. К символам в строке можно обращаться, используя индекс: s[i] обозначает i-тый символ в строке, нумерация начинается с единицы. Если индекс i выходит за пределы длины строки, то генерируется исключение.

Над строками определены операции сравнения: < > <= >= = <>. Сравнение строк на неравенство осуществляется лексикографически: s1 < s2 если для первого несовпадающего символа с номером i s1[i]<s2[i] или все символы строк совпадают, но s1 короче s2.

Операция + для строк означает конкатенацию (слияние) строк. Например: 'Петя'+'Маша' = 'ПетяМаша'.

Расширенный оператор присваивания += для строк добавляет в конец строки - левого операнда строку - правый операнд. Например:

var s: string := 'Петя';

s += 'Маша'; // s = 'ПетяМаша'

Строка может складываться с числом, при этом число предварительно преобразуется к строковому представлению:

s := 'Ширина: '+15; // s = 'Ширина: 15'

s := 20.5+''; // s = '20.5'

s += 1; // s = '20.51'

Над строками и целыми определена операция *: s*n и n*s означает строку, образованную из строки s, повторенной n раз:

s := '*'*10; // s = '**********'

s := 5*'ab' // s = 'ababababab'

s := 'd'; s *= 3; // s = 'ddd'

Подпрограммы для работы со строками

function Concat(s1,s2,...): string;

Возвращает строку, являющуюся результатом слияния строк s1,s2,...

function Copy(s: string; index, count: integer): string;

Возвращает подстроку строки s длины count с позиции index

procedure Delete(var s: string; index, count: integer);

Удаляет из строки s count символов с позиции index

procedure Insert(source: string; var s: string; index: integer);

Вставляет подстроку source в строку s с позиции index

function LastPos(subs, s: string): integer;

Возвращает позицию последнего вхождения подстроки subs в строке s. Если не найдена, возвращает 0

function LastPos(subs, s: string; from: integer): integer;

Возвращает позицию последнего вхождения подстроки subs в строке s начиная с позиции from. Если не найдена, возвращает 0

function LeftStr(s: string; count: integer): string;

Возвращает первые count символов строки s

function Length(s: string): integer;

Возвращает длину строки

function LowerCase(s: string): string;

Возвращает строку в нижнем регистре

function Pos(subs, s: string; from: integer := 1): integer;

Возвращает позицию подстроки subs в строке s. Если не найдена, возвращает 0

function PosEx(subs, s: string; from: integer := 1): integer;

Возвращает позицию подстроки subs в строке s начиная с позиции from. Если не найдена, возвращает 0

function ReadWordFromString(s: string; var from: integer): string;

Считывает из строки последовательность символов до пробельного символа начиная с позиции from и устанавливает from за считанным значением

function ReverseString(s: string): string;

Возвращает инвертированную строку

function RightStr(s: string; count: integer): string;

Возвращает последние count символов строки s

procedure SetLength(var s: string; n: integer);

Устанавливает длину строки s равной n

function StringIsEmpty(s: string; var from: integer): boolean;

Возвращает True если достигнут конец строки или в строке остались только пробельные символы и False в противном случае

function StringOfChar(ch: char; count: integer): string;

Возвращает строку, состоящую из count символов ch

function Trim(s: string): string;

Возвращает строку с удаленными начальными и конечными пробелами

function TrimLeft(s: string): string;

Возвращает строку с удаленными начальными пробелами

function TrimRight(s: string): string;

Возвращает строку с удаленными конечными пробелами

function UpperCase(s: string): string;

Возвращает строку в верхнем регистре

Примеры кодов программ

Пример 41_1

Составить программу, в которой выполняется присваивание, ввод и вывод символов.

program Primer41_1;

var a, b, c, d: char;

begin

d:=’!’; {присваивание значения}

write(’Введите три символа: ’);

read(a,b,c); {ввод трех символов}

writeln(a+b+c+d); {сцепление и вывод}

end.

Пример 41_2

Составить программу, которая определяет код введенного с клавиатуры символа.

program Primer41_2;

var s: char;

begin

write(’Введите символ: ’); readln(s);

{ввод символа}

writeln(’Код этого символа = ’, ord(s));

{вывод кода}

end.

Пример 41_3

Составить программу, которая определяет символ по его коду, введенному с клавиатуры.

program Primer41_3;

var n: integer;

begin

write(’Введите код символа от 33 до 255: ’);

readln(n); {ввод кода}

writeln(’Символ = ’, chr(n)); {вывод символа}

end.

Пример 41_4

Составить программу, которая определяет, какой символ введен с клавиатуры: цифра, большая или малая латинская буква. Введенный символ a преобразуем в код функцией ord(a).

program Primer41_4;

var a: char;

begin

write(’Введите символ: ’); read(a);

if (ord(a)>=48) and (ord(a)<=57)

then writeln(a,’ цифра’);

if (ord(a)>=65) and (ord(a)<=90)

then writeln(a,’ заглавная буква’);

if (ord(a)>=97) and (ord(a)<=122)

then writeln(a,’ малая буква’);

end.

Пример 1

Составить программу, которая выводит буквы введенного с клавиатуры слова в обратном порядке с задержкой 200 мс.

uses crt;

var s: string; i: integer;

begin

writeln ('Введите строку'); readln(s); {Ввод строки}

for i:=length(s) downto 1 do begin

write (s [i]); {Вывод символов}

sleep (200); {Задержка 200 мс}

end;

end.

Пример 2

Составить программу, которая определяет количество гласных во введенном с клавиатуры слове.

Uses crt;

var s, g: string; i, k: integer;

begin

g:= 'аеиоуыэюяАЕИОУЫЭЮЯ'; {строка гласных}

write('Введите слово: '); read(s); {ввод слова}

k:=0; {обнуление счетчика гласных}

for i:=1 to length(s) do {перебор букв слова }

if pos(s[i],g) <> 0 {сравнение со строкой гласных}

then k:=k+1;

writeln('гласных ',k);

end.

Пример 3

Составить программу, которая подсчитывает количество слов во введенной с клавиатуры строке.

uses crt;

var st: string; i,n: integer;

begin

writeln ('Введите строку: '); read(st);{ввод строки}

st:=st+' '; {добавление пробела}

n:=0; {обнуление счетчика слов}

for i:=1 to length(st) do

if (st[i]<>' ') and (st[i+1]=' ')

then n:=n+1; {подсчет слов}

writeln ('В строке ',n,' слов');

end.

Пример 4

С клавиатуры вводят слово. Составить программу, которая производит замену указанного слога на новый.

uses crt;

var s,sl,z: string; p,len: integer;

begin

write('Введите слово: ');

read(s); {ввод слова}

write('Заменить слог: ');

read (sl); {ввод заменяемого слога sl}

write ('на слог: ');

read(z); {ввод заменяющего слога z}

p:=pos (sl,s); len:=length(sl); {позиция и длина

слога sl}

delete (s,p,len); {удаление части слова s}

insert(z,s,p); {вставка слога z в слово s}

writeln(s); {вывод}

end.

Упражнения

Задание 1

Восстановите приведенную ниже программу 1 для решения задачи:

В двух массивах строковых констант хранятся слова — существительные и глаголы. Составить программу «Перепутанные слова», которая выводит пары этих слов случайным образом.

Программа 1

usescrt;consta:array[1..8]ofstring=('ученик ','артист ','художник ','рыба ','птица ','кошка ','собака ','корова ');constb:array[1..8]ofstring=('читает ','поет ','рисует ','плавает ','летает ','мяукает ','лает ','мычит '); vark:integer;beginwrite('Введите число от 1 до 8: '); read(k);writeln(a[k]+''+b[random(8)+1]);end.

Сохранить программу в формате 10Б_ФИ_Prog_1_1.pas

Б - буква класса

ФИ - фамилия и имя.

Задание 2

Восстановите приведенную ниже программу 2 для решения задачи:

В введенной строке слова разделены пробелами. Но пробелов между словами может оказаться сколь угодно. Составьте программу, которая бы удаляла лишний пробелы, оставляя только один.

Программа 2

begin

end.

uses crt;

delete(st,pos(' ',st),1);

readln(st); writeln('Результат выполнения: ', st);

while pos(' ',st)<>0 do

write('Введите текст: ');

var st:string;

Сохранить программу в формате 10Б_ФИ_Prog_1_2.pas

Задание 3

Измените программу, приведенную в примере 2 так, чтобы получить решение ниже представленной задачи.

С клавиатуры вводят слово и символ. Составьте программу, которая:

а) проверяет, есть ли в этом слове заданный символ;

б) определяет позицию заданного символа;

в) подсчитывает количество вхождений заданного символа.


Сохранить программу в формате 10Б_ФИ_Prog_1_3_а(бв).pas

Задание 4

С клавиатуры вводят строку и слово. Составьте программу, которая:

а) определяет позицию заданного слова;

б) удаляет заданное слово;

в) вставляет в строку заданное слово;

г) заменяет одно слово другим.

Выводим позицию слова, строку без указанного слова, сроку с новым словом.

Тестирование:

Ввод

Введите предложение:

Сейчас у нас проходит первая четверть

Какое слово ищем?

первая

На какое заменяем?

вторая

Вывод

Позиция слова: 23

Новое предложение:

Сейчас у нас проходит вторая четверть

Дополнительное задание