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

Тип данных CHAR

Каждая переменная символьного типа может принимать значение только одного символа. Все символы упорядочены в соответствии с принятым в ЭВМ коде (в соответствии с кодовой таблицей ASCII, «аски»). Посмотреть/скачать
При этом порядковый но­мер символов называется кодом (например, код латинского символа ‘А’ равен 65; символа ‘3’ равен 51).
Для символьных данных не определены никакие арифметические операции, но они могут сравниваться по своим кодам, участвовать в чтении, печати, операторах присваивания. Существуют две стандартные функции преобразования:
Chr(n: byte): char
Функция возвращает символ по коду, равному значению выражения n. Если n можно представить как числовую константу, то можно также пользоваться записью #n.
Ord(ch: char): byte;
В данном случае функция возвращает код символа ch.
Пример 1
Дано целое число N (1 ≤ N ≤ 26). Вывести N последних строчных (то есть маленьких) букв латинского алфавита в обратном порядке (начиная с буквы «z»)

program chr1;
uses
        crt;
var
        n, i: byte;
begin
clrscr;
write('Введите n = '); readln(n);
for i := ord('z') downto ord('z') - n + 1 do
        write(Chr(i):3);
readkey
end.

Строка — это последовательность символов. Строку можно представить как массив, элементы которого имеют тип CHАR. Например:
s: array[1..17] of char;
Массив s-массив символов, который содержит 17 символов. Если символов меньше, то строка дополняется пробелами справа. В про­тивном случае возникает ошибка несоответствия типов. Так как массивы символов являются обычными массивами с элементами типа CHAR, они обладают всеми свойствами массивов.

Тип данных STRING

В Паскаль предусмотрен тип данных STRING. Переменная типа STRING может принимать значения переменной длины. Максимально возможная длина переменной 255 символов.
Для ввода значений типа STRING необходимо использовать READLN, а не READ. За один раз может быть введена только одна строка. Две строки можно сравнивать, используя операции отношения (сначала сравниваются самые левые символы, если они равны, то сравниваются следующие).
Процедуры и функции для работы со строками
В FreePascal имеется несколько полезных стандартных процедур и функций, ориентированных на работу со строками. Ниже приводится список этих процедур и функций с краткими пояснениями.
Length(s:string):integer
Функция возвращает в качестве результата значение текущей длины строки-параметра
Пример.

n := length('Pascal'); {n будет равно 6}

Concat(s1,[s2,…,sn]:string):string
Функция выполняет слияние строк-параметров, которых может быть произвольное количество. Каждый параметр является выражением строкового типа. Если длина строки-результата превышает 255 символов, то она усекается до 255 символов. Данная функция эквивалентна операции конкатенации «+» и работает немного менее эффективно, чем эта операция.
Copy(s:string; index:integer; count:integer):string
Функция возвращает подстроку, выделенную из исходной строки s, длиной count символов, начиная с символа под номером index.
Пример.

s := 'Система Turbo Pascal';
s2 := copy(s, 1, 7); {s2 будет равно 'Система'}
s3 := copy(s, 9, 5); {s3 будет равно 'Turbo'}
s4 := copy(s, 15, 6); {s4 будет равно 'Pascal'}

Delete(var s:string; index,count:integer)
Процедура удаляет из строки-параметра s подстроку длиной count символов, начиная с символа под номером index.
Пример.

s := 'Система Turbo Pascal';
delete(s,8,6); {s будет равно 'Система Pascal'}

Insert(source:string; var s:string;index:integer)
Процедура предназначена для вставки строки source в строку s, начиная с символа index этой строки.
Пример.

s := 'Система Pascal';
insert('Turbo ',s,9); {s будет равно 'Система Turbo Pascal'}

Pos(substr,s:string):byte
Функция производит поиск в строке s подстроки substr. Результатом функции является номер первой позиции подстроки в исходной строке. Если подстрока не найдена, то функция возвращает 0.
Пример.

s := 'Система Turbo Pascal';
x1 := pos('Pascal', s); {x1 будет равно 15}
x2 := pos('Basic', s); {x2 будет равно 0}

Str(X: арифметическое выражение; var st: string)
Процедура преобразует численное выражение X в его строковое представление и помещает результат в st.
Val(st: string; x: числовая переменная; var code: integer)
Процедура преобразует строковую запись числа, содержащуюся в st, в числовое представление, помещая результат в x. x — может быть как целой, так и действительной переменной. Если в st встречается недопустимый (с точки зрения правил записи чисел) символ, то преобразование не происходит, а в code записывается позиция первого недопустимого символа. Выполнение программы при этом не прерывается, диагностика не выдается. Если после выполнения процедуры code равно 0, то это свидетельствует об успешно произошедшем преобразовании.
В дополнение приведем некоторые функции, связанные с типом char, но которые тем не менее часто используются при работе со строками.
Пример 2
Дана строка латинских символов. Перевести строку в верхний регистр символов.

program stroka1;
var
        str1: string;
        i: byte;
begin
write('Введите строку символов -> '); readln(str1);
for i:=1 to length(str1) do
        str1[i]:=upcase(str1[i]);
writeln('Новая строка: ');
write(str1)
end.

Пример 3
Дана строка, содержащая числовые символы. Заменить числовые символы на символ ‘w’.

program stroka2;
var
        s: string;
        i: byte;
begin
write('Введите строку символов -> '); readln(s);
for i:=1 to length(s) do
        if (ord(s[i]) >=48) and (ord(s[i])<=81) then
                s[i] := 'w';
writeln('Новая строка: ')
writeln(s)
end.

Пример 4
Дана строка. Составить программу для проверки баланса левых и правых скобок в заданной строке.

program stroka3;
uses
    crt;
var
    i: byte;
    rang:integer;
    s:string;
begin
clrscr;
writeln('введите строку'); readln(s);
rang:=0;
for i:= 1 to length(s)do
begin
    if s[i] = '(' then 
        inc(rang);
    if s[i] = ')' then 
        dec(rang);
    if rang < 0 then 
        break;
end;
if rang = 0 then 
    writeln('скобки расставлены правильно')
else 
    writeln('скобки поставлены неправильно');
readkey
end.

Пример 5
Дана строка. Составить программу, которая выводит строку наоборот (от последнего до первого символа).

program stroka4;
uses
    crt;
var
    i: byte;
    s1, s2:string;
begin
clrscr;
write('Введите строку'); readln(s1); 
s2 := ''; {Пустая строка, не пробел} 
for i:= length(s1) downto 1 do 
    s2 := s2 + s1[i]; 
writeln('Строка наоборот: ', s2);
readkey
end.

Домашнее задание

  1. Дано целое число N (1 ≤ N ≤ 26). Вывести N первых прописных (то есть заглавных) букв латинского алфавита.
  2. Дана строка. Подсчитать количество содержащихся в ней цифр.
  3. Дана строка, состоящая из русских слов, разделенных одним пробелом. Найти количество слов в строке.

Добавить комментарий