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