- •Символьные и литерные величины
- •1. Представление текстовой информации
- •2. Символьные величины
- •3. Литерные величины
- •4. Длина литерной величины
- •5. Работа с отдельными символами
- •6. Метод посимвольной обработки
- •7. Замена одного символа на другой
- •8. Операция соединения
- •9. Метол посимвольного формирования
- •10. Вырезки
- •11. Команда присваивания вырезке
- •12. Пример алгоритма, использующего вырезки
5. Работа с отдельными символами
С каждым из символов, составляющих литерную величину, можно работать отдельно. Символы литерной величины всегда пронумерованы, начиная с единицы: номер первого символа равен 1, номер последнего — длине литерной величины.
Обратиться к отдельному символу можно по тем же правилам, что и к элементу таблицы: надо указать номер символа в квадратных скобках после имени величины. Номер символа в строке называется его индексом.
Например, после выполнения команды t: ="информатика" значение t можно представить в виде такой таблицы:
лит t
и
|
н
|
ф
|
о
|
р
|
м
|
a
|
Т
|
И
|
к
|
а
|
1 2 3 4 5 6 7 8 9 10 11
Здесь t[l]="и", t[2]="н", t[11]=”a”
6. Метод посимвольной обработки
Многие задачи сводятся к посимвольной обработке заданной литерной величины. Обычно в таких задачах нужно по одному перебрать все символы, входящие в строку, и выполнить с каждым из них какие-то действия. По этой схеме построен, например, алгоритм вертикальная печать.
Вот как выглядит общая схема алгоритма посимвольной обработки:
нц для i от 1 до длин(s)
| обработка (s[i])
кц
Метод посимвольной обработки — это не что иное, как метод однопроходных алгоритмов, примененный к литерным величинам.
Задача 1. Вывести значение литерной величины по вертикали: по одной букве в каждой строчке экрана.
Чтобы сделать это, переберем все символы заданной величины, начиная с первого, и будем выводить каждый из них с новой строки. Для организации перебора используем цикл для.
алг вертикальная печать (арг лит s)
дано |
надо | строка s напечатана по вертикали
нач цел i
нц для i от 1 до длин(s)
вывод нс, s[i]
кон
Задача 2. Сколько раз в строке встречается символ х
алг цел количество символов (арг сим х,арг лит а)
надо| знач = количество символов х в строке а
нач цел i
знач :=0
нц для i от 1 до длин (а)
если a[i]=х
то знач := знач + 1
все
кц
кон
Чтобы с помощью этого алгоритма узнать общее количество k восклицательных и вопросительных знаков в строке b, достаточно написать команду присваивания:
k:= количество символов("!",b) + количество символов("?",b)
Задача 3. Определить долю пробелов в строке
Чтобы определить долю пробелов в строке, надо количество пробелов поделить на общее количество сим-волов (длину строки). Воспользуемся для подсчета количества пробелов алгоритмом, рассмотренным в задаче 2.
алг вещ доля пробелов (арг лит а)
дано | длин (а) > 0
надо | знач = доля пробелов в строке а
нач
знач := количество символов (" ",а)/ длин(а)
кон
7. Замена одного символа на другой
Обратившись к отдельному символу литерной величины, можно не только проанализировать, но и изменить его, точно так же, как можно изменить значение одного элемента простой таблицы.
Например, если выполнить серию команд t:="слон"; t[2]:=”т”,
то в результате литерная величина t получит значение стон.
Используя этот прием, можно, например, выполнить замену одного символа на другой во всей строке.
алг замена (арг сим х,у, арг рез лит а)
надо |в строке а все символы х заменены на у
нач цел i
нц для i от 1 до длин (а)
если a[i]=х
то a[i]:=у
все
кц
кон
В алгоритме величина а является одновременно аргументом и результатом (отсюда и запись арг рез лит а). Пусть, например,
b = "Понял. Немедленно выезжаю". Тогда после вызова
замена(".", "!", b) получим:
b = "Понял! Немедленно выезжаю!"
