Задания № 24, 26 · ЕГЭ

Перебор строки

Как пройти строку слева направо и выполнить действие для каждого символа
6 мин чтенияСложность: Обновлено 29 сентября 2026

Перебор строки — это последовательный просмотр всех её символов с помощью цикла. Такой приём позволяет искать нужные символы, считать их количество, находить свойства строки и строить новую строку с изменениями.

Что такое перебор строки

Строка состоит из символов, расположенных в определённом порядке. У каждого символа есть позиция, или индекс. В большинстве языков программирования индексы начинаются с нуля: первый символ имеет индекс \(0\), последний — \(n-1\), где \(n\) — длина строки.

При переборе программа по очереди получает каждый символ строки и выполняет над ним одно или несколько действий. Например, можно проверить, равен ли символ букве «А», является ли он цифрой или входит ли он в некоторый набор символов.

D
Определение

Перебор строки — последовательное обращение ко всем символам строки в порядке от первого к последнему или по индексам от \(0\) до \(n-1\).

\[i=0,1,2,\ldots,n-1\]1

Если нужно обработать каждый символ ровно один раз, достаточно организовать цикл с таким диапазоном индексов. Количество шагов цикла равно длине строки.

Python
1s = input()
2for i in range(len(s)):
3    print(s[i])
Псевдокод
ввести строку s
для i от 0 до длина(s) - 1:
    c := s[i]
    обработать c

Основные действия при просмотре

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

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

Для подсчёта используется переменная-счётчик. Её начальное значение обычно равно нулю. Если найден нужный символ, счётчик увеличивается на единицу.

\[count=\sum_{i=0}^{n-1}[s_i=c]\]2

Здесь \([s_i=c]\) равно \(1\), если символ на позиции \(i\) совпадает с \(c\), и \(0\) в противном случае. Поэтому сумма показывает, сколько раз символ \(c\) встретился в строке. Это связано с понятием частоты символов.

T
Правило подсчёта

Чтобы посчитать символы, удовлетворяющие условию, нужно начать счётчик с нуля и увеличивать его на \(1\) только внутри ветви, где условие истинно.

Проверь себя

Сколько раз выполнится тело цикла for i in range(len(s)), если длина строки равна \(7\)?

Поиск, счётчик и логический признак

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

Python
1s = input()
2count = 0
3for c in s:
4    if c == '0':
5        count += 1
6print(count)

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

Приём для поиска

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

Для проверки свойства всей строки часто используют переменную ok, первоначально равную True. При нарушении условия её меняют на False. Например, так проверяют, состоит ли строка только из цифр.

Python
1s = input()
2ok = True
3for c in s:
4    if c < '0' or c > '9':
5        ok = False
6print(ok)

Разобранный пример: подсчёт и замена

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

Показать решение по шагам Пример

Будем считать цифрой символ, для которого выполняется условие \('0'\le c\le '9'\). Для результата создадим пустую строку result.

1
В начале ещё не обработан ни один символ, поэтому счётчик равен нулю, а результат пуст.
\(\displaystyle count=0,\quad result=\text{""}\)
2
Для каждого символа строки проверяем, является ли он цифрой.
\(\displaystyle c\in\{0,1,\ldots,9\}\Rightarrow count:=count+1\)
3
Если символ цифра, добавляем в результат #; иначе добавляем исходный символ.
\(\displaystyle result:=result+\begin{cases}\text{"#"},&\text{если }c\text{ — цифра}\\c,&\text{иначе}\end{cases}\)
4
После последнего шага счётчик содержит число цифр, а результат — изменённую строку.
\(\displaystyle \text{вывести }count\text{ и }result\)
Python
1s = input()
2count = 0
3result = ''
4
5for c in s:
6    if '0' <= c <= '9':
7        count += 1
8        result += '#'
9    else:
10        result += c
11
12print(count)
13print(result)
№
Проверка на примере

Для строки ab12-c3 цифры — 1, 2, 3, поэтому ответ по количеству равен \(3\). Новая строка: ab##-c#.

Сложность и порядок обхода

Обычный перебор строки имеет линейную сложность: каждый символ просматривается один раз. Если длина строки равна \(n\), число основных проверок пропорционально \(n\).

\[T(n)=O(n)\]3

Порядок обхода важен в задачах на первый или последний подходящий символ. Просмотр слева направо находит первый символ, а просмотр справа налево — последний. При построении новой строки обычно сохраняется исходный порядок символов.

!
Частые ошибки

<ul><li>Перебор индексов от \(1\) до \(n\): первый символ пропускается, а индекс \(n\) не существует.</li><li>Увеличение счётчика вне условной ветви: тогда будут посчитаны все символы.</li><li>Сравнение строки со всей строкой вместо сравнения текущего символа с одним символом.</li><li>Изменение строки «на месте» во время обхода без понимания правил языка.</li><li>Забытый вывод ответа после цикла или неверное начальное значение накопителя.</li></ul>

В Python строки неизменяемы: операция result += c создаёт новое значение. Для школьных строк небольшого размера такой способ понятен и обычно достаточен. В задачах на удаление, вставку и сложную замену полезно отдельно изучить обработку строки по символам.

Если нужно только заменить символы, не обязательно сначала считать их. Практические варианты замены подробно рассматриваются на странице замена в строке. Для удаления и добавления символов используются отдельные приёмы: удаление символов и добавление символов.

Запомните

Схема почти любой задачи на перебор: прочитать строку → создать начальные значения → пройти все символы → проверить условие → обновить ответ → вывести результат.

Связь с индексами и подстроками

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

ЦельЧто хранитьДействие при совпадении
Количествосчётчик countcount += 1
Первый индекспеременная answerзаписать i и завершить поиск
Наличиелогический признак foundсделать found = True
Новая строкастрока resultдобавить новый или исходный символ
Q
Быстрый тест по теме

Быстрая проверка

~ 2 мин4 вопроса
Вопрос 1 / 4
Вопрос 1 из 4 · индексы
Какой диапазон индексов имеет строка длины \(n\)?
Главное за минуту

Главное

  • Перебор строки обрабатывает символы последовательно, обычно по индексам от \(0\) до \(n-1\).
  • Для подсчёта используется счётчик, который увеличивается только при выполнении условия.
  • Для поиска первого совпадения важен порядок обхода; индекс и количество — разные величины.
  • При построении результата на каждом шаге добавляют либо заменённый, либо исходный символ.
  • Обычный посимвольный перебор имеет сложность \(O(n)\); сначала задайте начальные значения, затем выполните цикл и выведите ответ.