На Горох
Информатика, 9 класс

§ 8. Стандартные процедуры и функции для работы со строковыми величинами

"Информатика. Учебное пособие для учреждений общего среднего образования с русским языком обучения", В. М. Котов, А. И. Лапо, Ю.А. Быкадоров, Е.Н. Войтехович

Объяснение темы В оглавлении: § 8. Стандартные процедуры и функции для работы со строковыми величинами

Кратко о теме

Строковые функции и процедуры помогают программе измерять текст, извлекать его части, находить нужные фрагменты и изменять строку. Символы в строке расположены по порядку и имеют номера, начиная с 1. Length, Copy и Pos возвращают результат, а Insert и Delete меняют строковую величину. Зная назначение этих средств и правила отсчёта позиций, можно обрабатывать текст без ручного подсчёта символов.

Объяснение темы

Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.

Определения и обозначения

Length(S) — функция, которая возвращает целое число символов в строке S. При подсчёте учитываются все символы, в том числе пробелы. Она нужна, чтобы узнать длину текста без ручного пересчёта.

Copy(S, позиция, количество) возвращает часть строки S, начиная с указанной позиции и содержащую заданное количество символов. Эту часть называют подстрокой. Copy удобно применять, когда из текста нужно получить слово или другой фрагмент.

Pos(образец, S) возвращает позицию первого вхождения образца в строку S, а если образец не найден — число 0. Образец — это фрагмент, который требуется отыскать. Функция помогает определить, есть ли нужный текст и где он начинается.

Insert и Delete — процедуры, изменяющие строковую величину. Insert вставляет одну строку в другую, а Delete удаляет из строки заданное количество символов. Они нужны для редактирования текста непосредственно в программе.

Как это устроено

Строку удобно представлять как последовательность символов, выстроенных в определённом порядке. Поэтому каждому символу можно сопоставить позицию: первый получает номер 1, следующий — 2. Нумерация с единицы позволяет прямо указывать, откуда начать извлечение, вставку или удаление. Если бы отсчёт начинался с нуля, при ручном поиске нужного места легко было бы ошибиться на один символ.

Length подсчитывает символы строки и выдаёт полученное число, поэтому не нужно перечислять их вручную. Пробел занимает место так же, как буква или знак препинания: он является символом. Например, в строке из трёх букв, пробела и двух букв длина равна шести. У пустой строки нет ни одного символа, поэтому Length для неё возвращает 0.

Copy получает два указания: где начать выбор и сколько символов взять. Сначала по позиции находят нужное место, а затем считают заданное количество символов, включая символ на начальной позиции. Если запрошенное количество ведёт за конец строки, извлечь отсутствующие символы нельзя, поэтому результатом становится только доступная часть. Это позволяет получить фрагмент, даже если его предполагаемая длина больше оставшейся части строки.

Pos проверяет строку слева направо, чтобы сообщить место первого совпадения образца. Поэтому при нескольких одинаковых фрагментах результатом будет позиция самого раннего из них, а не число совпадений и не позиция последнего. Если поиск доходит до конца, не обнаружив образец, функция возвращает 0. Такое специальное значение удобно проверять перед дальнейшими действиями: оно показывает, что подходящей позиции нет.

Insert и Delete работают с самой строковой величиной, а не возвращают выбранную часть текста. Вставка увеличивает строку, и символы справа от места вставки перемещаются дальше. Удаление уменьшает строку, поэтому символы после удалённого участка сдвигаются влево. Из-за такого сдвига позиции последующих символов меняются, и их следует определять уже в изменённой строке.

Стандартные средства обработки строк

ИмяВидНазначение и аргументыРезультат или изменение
Length(S)ФункцияПринимает строку SВозвращает число символов
Copy(S, позиция, количество)ФункцияПринимает строку, начало фрагмента и его длинуВозвращает подстроку
Pos(образец, S)ФункцияПринимает искомый образец и строкуВозвращает позицию первого вхождения или 0
Insert(вставляемая строка, S, позиция)ПроцедураПринимает текст для вставки, строку и место вставкиИзменяет строку S, вставляя текст
Delete(S, позиция, количество)ПроцедураПринимает строку, начало удаления и число символовИзменяет строку S, удаляя фрагмент

Сначала определите, нужно ли получить значение или изменить строку: это подскажет, использовать функцию или процедуру. Затем проверьте порядок аргументов и укажите позиции, отсчитывая их с единицы. Если операция зависит от найденного текста, сначала выполните Pos и проверьте его результат.

Разбор задач

Задача 1. Для строки S = «Информатика» определите длину. Нужно посчитать каждый символ, не пропуская ни одну букву. Проще применить стандартную функцию Length.

  1. Записываем вызов Length(S), потому что аргументом функции должна быть исследуемая строка.
  2. Учитываем все буквы слова: в «Информатика» их 11.
  3. Пробелов в строке нет, поэтому дополнительных символов к счёту не прибавляем.

Ответ: Length(S) = 11. Функция вернула число символов в строке.

Задача 2. Для строки S = «программирование» получите фрагмент из пяти символов, начиная с позиции 4. Требуется не найти четвёртую букву с нуля, а начать с символа, которому присвоена позиция 4. Для этого используется Copy.

  1. Записываем Copy(S, 4, 5): число 4 задаёт начальную позицию, а число 5 — количество символов.
  2. Отсчитываем от начала строки: п — 1, р — 2, о — 3, г — 4.
  3. Берём пять символов, начиная с «г»: г, р, а, м, м.

Ответ: Copy(S, 4, 5) возвращает «грамм». Исходная строка при этом не меняется.

Задача 3. В строке S = «школьная информатика» найдите слово «информатика», затем удалите его. Сначала нужно определить начало слова, поскольку оно стоит после другого фрагмента и пробела. Удалять следует только при условии, что Pos нашла образец.

  1. Вычисляем Pos(«информатика», S). Первое «и» в слове начинается с позиции 10, значит, образец начинается там.
  2. Проверяем результат: он равен 10, а не 0, поэтому слово найдено и можно выполнять удаление.
  3. Длина слова «информатика» равна 11 символам. Выполняем Delete(S, 10, 11), чтобы удалить слово, начиная с позиции 10.

Ответ: после удаления в S остаётся «школьная ». Пробел перед удалённым словом не входил в заданный фрагмент, поэтому он сохранился. Если бы Pos вернула 0, команду Delete с этой позицией выполнять было бы нельзя.

Типичные ошибки

Отсчёт с нуля. Так ошибаются, перенося правило нумерации из некоторых других языков программирования. В строковых операциях первый символ имеет позицию 1, поэтому позиция 0 не обозначает начало обычного фрагмента. Проверьте себя: выпишите символы строки и подпишите над первым номер 1.

Неверное толкование Pos. Иногда думают, что функция возвращает число совпадений или расположение последнего совпадения. На самом деле она сообщает позицию первого вхождения образца при поиске слева направо. Чтобы проверить ответ, найдите образец в строке вручную и сравните номер самого раннего совпадения с результатом Pos.

Игнорирование результата 0. Ошибка возникает, если найденное значение сразу подставляют в Delete или Copy, не проверив, существует ли образец. Ноль означает, что подходящего фрагмента нет, а не его обычную позицию. Добавьте проверку «результат Pos не равен 0» и выполняйте дальнейшее действие только при её выполнении.

Смешение функций и процедур. Можно ожидать, что Insert или Delete вернут новую строку, как это делают функции Length, Copy и Pos. Но первые две операции изменяют строковую величину, а последние три выдают значение. Проверьте себя вопросом: нужно получить ответ для дальнейшего использования или отредактировать строку? Это помогает выбрать нужный вид операции.

Связь с другими темами

Для строковых операций нужно уметь задавать строковые величины и переменные, а также правильно записывать вызовы стандартных функций и процедур. Эти знания помогают понимать, какие данные передаются операции и где появляется её результат. В свою очередь, обработка строк пригодится при работе с текстовыми данными: можно искать слова, выделять фрагменты и редактировать текст в программе. Такие действия встречаются в задачах, где программе нужно анализировать или менять введённые пользователем сообщения.

Что запомнить

  • Позиции символов в строке отсчитываются с единицы.
  • Length возвращает число символов, включая пробелы.
  • Copy извлекает фрагмент строки.
  • Pos возвращает позицию первого вхождения или 0, если совпадения нет.
  • Insert вставляет строку, а Delete удаляет часть строки.
  • После изменения строки позиции последующих символов могут измениться.

Частые вопросы по теме

С какого номера начинается отсчёт символов в строке?

С единицы: первый символ строки имеет позицию 1, второй — позицию 2 и так далее. Поэтому при работе с Copy, Insert и Delete нельзя начинать отсчёт с нуля.

Учитываются ли пробелы при вычислении длины строки?

Да, каждый пробел считается символом и увеличивает длину строки на единицу. Это относится и к пробелам в начале или конце строки.

Что возвращает Pos, если искомая строка не найдена?

В этом случае Pos возвращает 0. Перед использованием результата для удаления или извлечения фрагмента нужно проверить, что он не равен нулю.

Изменяет ли Copy исходную строку?

Нет, Copy возвращает выбранный фрагмент, но не меняет исходную строку. Чтобы сохранить результат, его можно присвоить другой строковой переменной.

Почему после Insert или Delete могут измениться позиции символов?

Вставка добавляет символы, а удаление убирает их, поэтому часть строки сдвигается. Символы справа от изменённого участка получают новые позиции.

Спросить по теме параграфа

§ 8. Стандартные процедуры и функции для работы со строковыми величинами

Учебник

Оглавление →
Предмет
Информатика
Класс
9 класс
Учебник
"Информатика. Учебное пособие для учреждений общего среднего образования с русским языком обучения", В. М. Котов, А. И. Лапо, Ю.А. Быкадоров, Е.Н. Войтехович