Использование символьных и строковых величин в среде программирования 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
Новое предложение:
Сейчас у нас проходит вторая четверть