Строки
План лекции
Символьный тип данных
Символьный тип данных
Символьный тип данных
Символьный тип данных
Символьный тип данных
Символьный тип данных
Символьный тип данных
Символьный тип данных
Таблица символов ASCII
Символьный тип данных
Строковый тип данных
Строковый тип данных
Строковые константы
Длина строки
Обращение к символам строки
Внутренняя структура представления строк в памяти
Длина строки
Операции над строковыми выражениями
Конкатенация
Конкатенация
Операции отношения
Операции отношения
Операции отношения
Решение задач
Решение задач
Решение задач
Решение задач
Решение задач
Функция Upcase
Функция Upcase
Функция Copy
Функция Copy
Функция Pos
Функция Pos
Функция Concat
Процедура Insert
Процедура Delete
Процедура Str
Процедура Val
0.99M
Category: programmingprogramming

Строки. Таблица символов ASCII. Обращение к символам строки. Процедуры работы со строками

1. Строки

Лекция №8
Строки

2. План лекции

План лекции
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Символьный тип данных
Таблица символов ASCII
Строковый тип данных
Строковые константы
Длина строки
Обращение к символам строки
Внутренняя структура представления строк
Операции над строковыми выражениями
Функции работы со строками
Процедуры работы со строками
Решение задач

3. Символьный тип данных

Символьный тип данных
В символьный тип char входит 256
символов расширенной таблицы ASCII
Например,
'a', 'b', 'я', '7', ‘&'
Номер символа, возвращаемый функцией
ord(), совпадает с номером этого
символа в таблице ASCII.

4. Символьный тип данных

Символьный тип данных
Пример описания символьной переменной:
Var
simb1, simb2 : char;
Begin
simb1:=‘R’;
simb2:=#65;
{ С помощью
производится
перевод
целого
числа
в
соответствующий символ данного ASCII-кода }
write (simb1,simb2);
End.
Результат работы программы
RA
#

5. Символьный тип данных

Символьный тип данных
Все символы упорядочены, т.к. имеют
свой
личный
номер.
Важно,
что
соблюдаются следующие отношения:
 
'A' < 'B' < 'C' < ... < 'X' < 'Y' < 'Z'
'0' < '1' < '2' < ... < '7' < '8' < '9'
Для проверки равенства или неравенства
переменных типа char могут
использоваться операторы логического
сравнения.

6. Символьный тип данных

Символьный тип данных
Задача 1.
Написать программу, которая считывает два символа и печатает
больше, равны или меньше первый символ второго.
Program Z1;
Var
First, Second : char;
Begin
Write ('Введите два символа через пробел ');
Readln (First, Second);
Write ('Первый символ ');
If First > Second then
Write ('больше второго. ');
else if First = Second then
Write ('равен второму. ‘);
else
Write ('меньше второго. ');
Еnd.

7. Символьный тип данных

Символьный тип данных
Так как char - порядковый тип, то к его значениям
применимы следующие функции.
Succ - возвращает следующий символ;
Pred - возвращает предыдущий символ;
Ord - возвращает значение ASCII-кода символа;
Chr - возвращает значение символа, является обратной по
отношению к функции Ord.
Примеры:
Succ('0')='1' // символ, следующий за символом 0, равен
символу 1.
Pred('3')='2' // символ, предшествующий символу 3, равен 2;
Chr(65)='A' // символ, соответствующий ASCII-коду 65, равен
А;
Ord('A')=65 // ASCII-код символа А равен 65

8. Символьный тип данных

Символьный тип данных
Задача 2.
Запросите у пользователя символ и выведите на экран 5 символов, следующих за ним в таблице
американских стандартных кодов обмена информацией. Проверьте, есть ли среди них знаки
препинания.
Program Z2;
Var
A: char;
i : integer;
X : boolean;
Begin
Write ('Введите символ ');
Readln (A);
X:=FALSE;
For i:=1 to 5 do
begin
inc(A);
Write (A);
If (A=‘,’) or (A=‘-’) or (A=‘.’) or (A=‘!’)
or (A=‘?’) or (A=‘:’) then
X:=TRUE;
end;
if X then
Writeln (‘Знаки препинания есть.‘);
Else
Writeln (‘Знаки препинания отсутствуют');
Еnd.

9. Символьный тип данных

Символьный тип данных
Задача 3.
Вывести в одну строку символы ABBCCCDDDD...ZZ...Z.
Program Z3;
Var
a : char;
j,i: integer;
Begin
a:='A';
for i:=1 to 26 do
begin
for j:=1 to i do
write(a);
inc(a);
end;
End.

10. Символьный тип данных

Символьный тип данных
Задача 4.
Вывести треугольник из
символов:
Аяяяяяяяя…я
Бюююю…ю
Вээээээ…э
...
Эввв
Юбб
Яа
Program Z4;
Var
i,j : char;
n,k : integer;
Begin
j:=‘я';
n:=32;
for i:=‘А' to ‘Я' do
begin
write(i);
for k:=1 to n do
write(j);
dec(j);
dec(n);
if ord(j)=223 then
j:=chr(175);
writeln;
end;
End.

11. Таблица символов ASCII

Таблица символов ASCII

12. Символьный тип данных

Символьный тип данных
Задача 5.
Получить массив символов размером 20 из случайных символов, заглавных букв
латинского алфавита. Подсчитать количество символов ‘S’ в массиве.
Program Z5;
Var
a : array [1..20] of char;
i,k : integer;
Begin
k:=0;
Randomize;
For i:=1 to 20 do
begin
a[i]:=chr(random(26)+65);
write(a[i]);
if a[i]='S' then
inc(k);
end;
writeln;
writeln(k);
End.

13. Строковый тип данных

Строковый тип данных
Строка (string) - это последовательность символов.
Тип данных (string) определяет строки с максимальной длиной
255 символов.
Переменная этого типа может принимать значения переменной
длины.
Пример :
Var
s : string;
Begin
Read(s);
Writeln(s);
End.

14. Строковый тип данных

Строковый тип данных
Строковая переменная может иметь атрибут длины,
определяющий ее максимальную длину.
Пример :
Var
s : string[50];
Begin
s:=‘От топота копыт пыль по полю летит.’;
write(s);
End.

15. Строковые константы

Строковые константы
Строковая константа – последовательность символов,
заключенная в апострофы.
Пример :
‘От топота копыт пыль по полю летит.’
‘284’
‘’ – пустая строковая константа

16. Длина строки

Длина строки
Текущая длина строковой переменной может быть определена с
помощью встроенной функции length.
Для заданного значения типа string эта функция возвращает целое
значение, показывающее количество символов в строке.
Пример:
Var
s : string;
n : integer;
Begin
s:=‘расписание занятий’;
n:=length(s);
Writeln (n);
End.
Результат исполнения программы:
18

17. Обращение к символам строки

Обращение к символам 
строки
К отдельным символам строки можно обратиться по номеру
(индексу) данного символа в строке.
Пример:
Var
s : string;
Begin
s:=‘паровоз’;
Writeln (s[3]);
End.
Результат работы программы:
p

18. Внутренняя структура представления строк в памяти

Внутренняя структура 
представления строк в памяти
Для хранения строковых переменных выделяется память, на
единицу большая максимальной длины строки. Начальный
байт этой памяти отводится для хранения текущей длины
строки, следующие байты - для символов самой строки. Так
как элементы строк стандартно нумеруются целыми числами,
начиная с единицы, байт с длиной строки можно считать
нулевым ее элементом.
Такая структура памяти допускает прямой доступ к ее
элементам.
Индекс
ы
0
strok
a
14 М а м а
1 2 3 4 5 6 7 8 9 10 1
1
Длина
строки
м ы л а
stroka[
7]
р
12 13 14 15 16
а
м
25
5
у
пустые
символы

19. Длина строки

Длина строки
Задача 6-1.
Напишите программу, которая после ввода строки, выводит ее
символы в обратном порядке.
Пример :
А РОЗА УПАЛА НА ЛАПУ АЗОРА
АРОЗА УПАЛ АН АЛАПУ АЗОР А
Progrem Z6;
Var
s: string;
i,n: integer;
Begin
Readln(s);
n:= length(s);
for i:=n downto 1 do
write(s[i]);
End.

20. Операции над строковыми выражениями

Операции над строковыми 
выражениями
Над строками можно выполнять операции :
1. Конкатенацию (сцепление строк).
2. Операции отношения (>, <, >=, <=, = , <>)

21. Конкатенация

Конкатенация – сцепление нескольких строк в одну
результирующую строку.
На языка Паскаль записывается как +
Пример :
Var
a : string;
Begin
a:=‘Мама’+’ мыла’+’ раму.’;
Writeln(a);
End.
Длина результирующей строки не должна превышать 255
символов.

22. Конкатенация

Задача 6-2.
Напишите программу, которая после ввода строки, получает новую строку из
исходной, записью ее символов в обратном порядке.
Пример :
Шалаш Казак Телефон
нофелеТ казаК шалаШ
Program Z6_2;
Var
s, q : string;
i,n: integer;
Begin
Readln(s);
n:= length(s);
q:=‘’;
for i:=n downto 1 do
q:=q+s[i];
Writeln(q);
End.

23. Операции отношения

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

24. Операции отношения

Операции отношения
Определите значение логических выражений :
‘True1’<‘True2’
‘Month’>’MONTH’
‘мама’ <> ‘Мама’
‘папа’ = ‘ папа’
‘Cat’ = ‘Cat’
‘Cat and Dog’ <= ‘Cat’
‘Rita’ >= ‘RITA’

25. Операции отношения

Операции отношения
Определите значение логических выражений :
‘True1’<‘True2’
‘Month’>’MONTH’
‘мама’ <> ‘Мама’
‘папа’ = ‘ папа’
‘Cat’ = ‘Cat’
‘Cat and Dog’ <= ‘Cat’
‘Rita’ >= ‘RITA’
TRUE
TRUE
TRUE
FALSE
TRUE
FALSE
TRUE

26. Решение задач

Решение задач
Задача 7.
Дана строка. Подсчитать в ней количество вхождений
буквы ‘w’.
Program Z7;
Var
s : string;
i,n: integer;
Begin
Readln(s);
n:=0;
for i:=1 to length(s) do
if s[i]=‘w’ then
inc(n);
Writeln(n);
End.

27. Решение задач

Решение задач
Задача 8.
Дана строка. Заменить в ней все вхождения
последовательностей символов ‘муха’ на ‘слон’.
Program Z8;
Var
s : string;
i: integer;
Begin
Readln(s);
for i:=1 to length(s)-3 do
if (s[i]=‘м’) and (s[i+1]=‘у’) and (s[i+2]=‘х’) and
(s[i+3]=‘а’) then
begin
s[i]:=‘c’; s[i+1]:=‘л’; s[i+2]:=‘о’; s[i+3]:=‘н’;
end;
Writeln(s);
End.

28. Решение задач

Решение задач
Задача 9.
Дана строка. Получите новую строку из символов исходной
строки, стоящих в четных позициях исходной строки.
Program Z8;
Var
s,q : string;
i: integer;
Begin
Readln(s);
q:=‘’;
for i:=1 to length(s) div 2 do
q:=q+s[2*i];
Writeln(q);
End.

29. Решение задач

Решение задач
Задача 10.
Заставьте компьютер случайным образом загадать заглавную
букву русского алфавита. Предложите пользователю
отгадать загаданную букву, помогая ему следующим образом.
Если в очередной попытке пользователем введена буква,
стоящая ближе к загаданной, чем предыдущая, то выводите
пользователю сообщение "Горячее!", а если дальше "Холоднее!".

30. Решение задач

Решение задач
Program Z10;
Var
z,x : char;
n,m : integer;
Begin
Randomize;
z:=chr(random(33)+128);
writeln(z);
n:=32;
repeat
readln(x);
if x<z then
m:=ord(z)-ord(x)
else
m:=ord(x)-ord(z);
if m<n then
writeln (‘Горячее !')
else
writeln
(‘Холоднее !');
n:=m;
until x=z;
writeln (‘Вы отгадали. Это
буква   '+z);
End.

31. Функция Upcase

Функция Upcase
Функция Upcase позволяет преобразовывать символ из
строчного в прописной.
Эта функция рассчитана на обработку отдельного символа.
Поэтому для обработки строки символов с помощью этой
функции приходится организовывать цикл.
Пример :
Program Z11;
Var
  s: string;
  i : Byte;
Begin
  s := 'фирма Microsoft';
  for i := 1 to length (s) do
    s[i] := UpCase (s[i]);
    writeln(s); {выводится текст 'фирма MICROSOFT'}
End.

32. Функция Upcase

Функция Upcase
Русские символы не могут обрабатываться этой
функцией.
Для того, чтобы преобразовать в заглавные строчные
буквы русского алфавита, применяют оператор
выбора:
...
    case s[i] of
      'a' : s[i] := 'A';
      'б' : s[i] := 'Б';
      'в' : s[i] := 'В';
      . . .
end;
...

33. Функция Copy

Функция Copy
Функция Copy позволяет копировать фрагмент некоторой
строки из одной переменной в другую.
Вызывая эту функцию нужно указать следующие
параметры:
• имя строки, из которой должен извлекаться копируемый
фрагмент;
• позицию в строке, начиная с которой будет копироваться
фрагмент;
• число копируемых символов.
Пример :

s:=‘паровоз’;
q:=copy(s,5,3);

34. Функция Copy

Функция Copy
Program Z12;
Var
  s : string;
  q : string[20];
Begin
  s := 'фирма Microsoft';
  writeln(s); {выводится текст 'фирма MICROSOFT'}
  q := Copy (s,1,5);
  writeln(q); {выводится текст 'фирма'}
End.
Если начальная или конечная позиции копируемого текста
находятся вне пределов исходной строки символов, то
сообщение
об
ошибке
не
выдается.
Результатом
выполнения операции в первом случае будет строка
нулевой длины, во втором - фрагмент от начальной
позиции копирования до конца исходной строки.

35. Функция Pos

Функция Pos
C помощью функции Pos Вы можете осуществить поиск
некоторого фрагмента в строке. Если заданный фрагмент в
строке присутствует, то функция возвращает номер позиции, с
которой он начинается. Если фрагмент не найден, то функция
возвращает 0.
Пример:

s:=‘информатика’
x:=pos(’форма’,s);

Результат :
x=3
Функция Pos требует полного совпадения искомого фрагмента
и фрагмента строки, в которой производится поиск. Причем
большие и маленькие буквы считаются различными символами.

36. Функция Pos

Функция Pos
Program Z13;
Var
  s : string;
  q : string[20];
  p : Byte;
Begin
  s := 'фирма Microsoft';
  writeln(s); {выводится текст 'фирма MICROSOFT'}
  writeln ('Введите искомый текст ');
  readln (q);
  p:= Pos(q,s);
  if p <> 0
    then
      begin
        write ('Фрагмент <‘+q+'> содержится в строке <‘+s);
        writeln ('>, начиная с позиции ',p);
      end
    else
      writeln('Фрагмент <‘,q,'> не содержится в строке <‘,s);
End.

37. Функция Concat

Функция Concat
Функция
Concat
(Str1,Str2,...,StrN)
выполняет
конкатенацию (или сцепление) строк Str1,Str2,...,StrN в том
порядке, в каком они указаны в списке параметров.
Сумма символов всех сцепленных строк не должна
превышать 255.
Пример:
Program Z14;
Var
  s : string;
  q1, q2 : string[20];
Begin
  q1 := 'фирмы ';
  q2 := 'Microsoft';
  s := Concat(‘Программы ‘,q1,q2);
  writeln(s); {выводится текст ‘Программы фирмы Microsoft'}
End.

38. Процедура Insert

Процедура Insert
Процедура Insert вставляет в исходную строку, начиная с
указанной позиции, какую-либо другую строку.
Оператор Insert (str1,str2,5) указывает, строку str1
необходимо вставить в строку str2, начиная с 5-ой
позиции.
Пример:
Program Z15;
Var
d,m : string;
Begin
m:=‘, дарованный нам свыше,’;
d:=‘От ветра пламя пуще полыхает, так и талант не
чахнет в испытаниях, а крепчает.’;
insert (m,d,42);
Write(d);
End.

39. Процедура Delete

Процедура Delete
Процедура Delete удаляет в исходной строке фрагмент
определенной длины, начиная с указанной позиции.
Так, оператор Delete(str1,2,3) удаляет из указанной
строки фрагмент, длиной в три символа, начиная со
второго.
Пример:
Program Z16;
Var
m : string;
Begin
m:=‘мухомор’;
delete (m,4,3);
Write(m);
End.

40. Процедура Str

Процедура Str
Общий вид Str(Chislo,Stroka)
Процедура Str преобразовывает числовое значение
переменной Chislo в строковую переменную Stroka. После
первого
параметра
может
указываться
формат,
аналогичный формату вывода.
Program Z17;
Var
  x : string;
  y : integer;
Begin
  y := 1560;
  Str(y,x);
  writeln(x); {выводится строка ' 1560'}
End.

41. Процедура Val

Процедура Val
Общий вид Val(Stroka,Chislo,Code)
Процедура Val преобразует значение строки Stroka в величину целочисленного
или вещественного типа и помещает результат в Chislo. Значение строковой
переменной Stroka не должно содержать пробелов в начале и в конце.
Code целочисленная переменная. Если во время операции преобразования ошибки
не обнаружено, значение Code равно нулю, если же ошибка обнаружена, Code
будет содержать номер позиции первого ошибочного символа, а значение Chislo
будет не определено.
Program Z18;
Var
  s: string;
  x, Code : integer;
Begin
  writeln('Введите строку цифр ');
  readln(s);
  Val(s, x, Code); {преобразование строки в число}
  if Code <> 0
    then
      writeln('Ошибка! В позиции ',Code,' не цифра!',)
else
write(x);
End.
English     Русский Rules