Pascal: Занятие № 11. Строковый тип данных в Паскаль

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

Символьный тип char в Паскале

Символьной переменной соответствует тип char:

var s: char;

Инициализация символьной переменной:

u:='a';

Основные функции для работы с символами

Функция преобразует целое число, имеющее тип BYTE, в один символ ASCII-кода:

CHR(x: byte): char;

Пример: распечатать двойную кавычку по ее коду в ASCII-таблице

1
2
3
4
5
6
7
var a:char;
    i:byte;
begin
     i:=34; {код, соответствующей символу " в ASCII-таблице}
     a:=chr(i);
     writeln(a)
end.

Функция возвращает порядковый номер символа параметра в таблице ASCII:

ORD(c: char): byte;

Пример: Распечатайте часть таблицы ASCII, конкретнее — символы, соответствующие кодам 32-255

1
2
3
4
5
var i: integer;
begin
     for i:=32 to 255 do
         write(chr(i):3);
end.

Строковые переменные в Паскаль

Строковые переменные в Паскале имеют тип String

Объявление и инициализация строковой переменной:

1
2
3
4
5
var a:string;
begin
 a:='Привет всем!';
 writeln(a);
end.

Ввод значения строковой переменной с клавиатуры:

1
2
3
4
5
6
var a:string;
begin
 writeln('Введите слово');
 readln(a);
 writeln('Вы ввели слово ',a);
end.

Строка «рассматривается» компилятором, как массив букв:

s:='Банка';

для компилятора:

s[1]='Б'   s[2]='а'   s[3]='н'   s[4]='к'   s[5]='а'

Важно: Значения строковых переменных всегда заключаются в одинарные кавычки

Функции работы со строками в Pascal

Исходные данные Операция Результат
s1:='Мото';      s2:='роллер'
s3:=s1+s2;
s3=’Мотороллер’
s5:='Мотороллер';
k:=Pos('рол',s5);
k=5
s3:='Мотороллер';
l:=Length(s3);
l=10
s3:='астроном';
s4:=Copy(s3,3,4);
s4= ‘трон’
s5:='Коробочка';
Delete(s5,4,2);
s5=’Корочка’
s6:='Рука'; s7:='баш';
Insert(s7,s6,3);
s6=’Рубашка’
x:=2.73284;
Str(x:4:2,s8);
s8=’2.73′
s8='2.73';
Val(s8,x,Osh);
x=2.73

Пример: Подсчитать кол-во букв «f» в тексте.

Показать решение:

1
2
3
4
5
6
7
8
9
10
11
var s:string[30];
    n,i:integer;
begin
 writeln('введите текст');
 readln(s);
 n:=0;
 for i:=1 to length(s) do
     if s[i]='f' then
        n:=n+1;
 write('в тексте букв f = ',n)
end.

String 1. Дан текст. Удалить в нём все слова кот

String 2. Составить программу проверки, есть ли в тексте буква s. Выдавать true (если найдено) или false (если не найдено).
Примеры использования логического типа (true и false) смотрите здесь.

String 3. Имеется строка текста. Требуется написать программу, которая зашифровывала бы ее в другую строку — заменяя каждый символ текста символом, следующим по порядку в таблице ASCII. Тогда слово КОТ превратится в слово ЛПУ. Требуется составить и программу дешифровки.
Использовать функции для работы с символами: chr и ord pascal.

String 4. Дано предложение, определить количество слов в нём.
Подсказка: считать количество слов по количеству пробелов в строке.

Пример: Найти количество цифр в строке.

Показать решение:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const
  m = ['1'..'9'];
 
var
  s: string;
  i, k: byte;
 
begin
  read(s);
  k := 0;
  for i := 1 to length(s) do
    if s[i] in m then inc(k);
  writeln('цифр  = ', k);
  readln;
end.

Пример: Определить является ли данное слово перевертышем (палиндромом).

Показать решение:

1
2
3
4
5
6
7
8
9
10
11
12
13
var a,b,c:string;
    i:longint;
begin
write('введите слово:');
readln(a);
b:='';
for i:=1 to length(a) do
    b:=a[i]+b;
if a=b then
   write('перевертыш')
   else
   write('не перевертыш');
end.

String 5. Составить программу подсчета количества встречаемых в тексте сочетаний букв «ма».

String 6. Определить, встречается ли в тексте сочетание букв «ку».

String 7. Заменить данную букву в слове другой буквой (буквы вводит пользователь).

String 8. Дано предложение, определить количество слов, начинающихся с буквы «к».

String 9. Дано предложение, состоящее из букв и цифр. Определить слово с наибольшим количеством букв (не цифр). В качестве подсказки можете использовать предложенный ниже алгоритм:

Алгоритм:

  • После того как строка считывается (вводится), измеряется ее длина (функция length).
  • Далее стока просматривается посимвольно в цикле while или for.
  • Если символ строки входит в множество букв (const letters=['a'..'z'];), то этот символ прибавляется к первому элементу массива слов строки (... array [1..100] of string).
  • Если символ равен пробелу, то увеличиваем счетчик для массива слов и переходим к следующей итерации цикла.

  • String 10. Дано предложение. Расположить слова в нем в порядке возрастания числа букв в словах. В качестве подсказки можете использовать предложенный ниже алгоритм:

    Алгоритм:

  • Пока не достигнем пробела, формируем элемент массива b (строковый массив — будущий массив из слов предложения). Добавляя каждую букву в переменную d.
  • При достижении пробела чистим переменную d для слова и начинаем формировать следующее слово.
  • После того, как массив из всех слов сформирован: начиная со второго элемента, сравниваем его длину с длиной предыдущего элемента. При необходимости меняем элементы местами. Проходим алгоритм до конца массива b.
  • String 10. Ввести имя, отчество и фамилию. Преобразовать их к формату «фамилия-инициалы».

    Пример:
    
    Введите имя, фамилию и отчество:
    Иван Алибабаевич Попов
    Результат:
    Попов И.А. 
    

    Примечание:
    Использовать функции: Pos, Copy, Delete

    Посимвольный ввод до пробела

    Посимвольный ввод удобен для «мгновенной» обработки символов в строке.

    Пример: посимвольно считывать фамилию

    Решение:
    посимвольный ввод строк

    Для организации массива символьных строк:

    Пример: посимвольно считывать фамилии и заносить их в массив фамилий

    Решение:
    массив символьных строк
    String 11. с клавиатуры вводится число N, обозначающее количество студентов в группе, а затем – N строк, в каждой из которых – информация о студенте в формате:
    <Фамилия> <год рождения> <оценка>

    1. Все данные разделяются одним пробелом. Нужно подсчитать, сколько студентов получили отметку 5.
    2. Вывести фамилии студентов, у которых оценка 2.
    3. Вывести фамилии студентов, родившихся в 1996 году.


    String 12. Программа должна позволять ввести текст, и потом удалять в нем все восклицательные знаки, расположенные непосредственно перед запятой, и выводить измененный текст на экран.

    Пример:
    Входной текст: Алгоритм — это правила выполнения определенных действий!, предписание исполнителю! совершить последовательность действий!, набор команд для компьютера!
    Выходной текст: Алгоритм — это правила выполнения определенных действий, предписание исполнителю! совершить последовательность действий, набор команд для компьютера!

    Трудность низкая:
    Программа должна формировать в памяти вторую строковую переменную с измененным текстом, а потом выводить ее на экран.

    Трудность высокая:
    Программа должна преобразовывать исходную строку без использования дополнительных переменных, и затем выводить ее на экран.


    И напоследок рассмотрим олимпиадное задание по Паскалю:

    Задача Цезарь: Шифр Цезаря заключается в том, что каждая буква исходной строки заменяется третьей после нее буквой в алфавите, который считается написанным по кругу (все символы текста латинские и прописные).

    * Решить ту же задачу, в которой сдвиг будет не на 3 позиции, а на k, причем отрицательное значение является признаком сдвига влево, положительное — вправо.

    Показать решение:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    var a:char;
        i,n:byte;
        s,s1:string;
    begin
    s1:='';
    readln(s);
    for i:=1 to length(s) do
        begin
         n:=ord(...); 
         n:=n+3;
         if n=123 then n:=97; {в ASCII 120 - x, 97 - a}
         if ...; {в ASCII 121 - y, 98 - b}
         if ...; {в ASCII 122 - z, 99 - c}
         a:=chr(...);
         s1:=...;
         end;
         writeln(s1)
    end.

    Потренируйтесь в решении задач по теме, щелкнув по пиктограмме:

    проверь себя

    Поделитесь уроком с коллегами и друзьями:

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

    Ваш e-mail не будет опубликован. Обязательные поля помечены *

    *
    *

    Вставить формулу как
    Блок
    Строка
    Дополнительные настройки
    Цвет формулы
    Цвет текста
    #333333
    Используйте LaTeX для набора формулы
    Предпросмотр
    \({}\)
    Формула не набрана
    Вставить