РУҚА
Тапсырмалар № 10, 12, 19 · ЕГЭ

Обработка строки по символам

Посимвольный перебор строки для подсчёта, замены и проверки символов
6 мин чтенияҚиындық: Обновлено 29 қыркүйек 2026

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

Что значит обработать строку по символам

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

D
Посимвольная обработка

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

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

  • счётчик увеличивают, если найден нужный символ;
  • логическую переменную используют для проверки условия;
  • строку-результат постепенно дополняют обработанными символами;
  • минимум или максимум обновляют при нахождении лучшего значения.
Python
s = "A1b2C3"
count = 0
for ch in s:
    if ch.isdigit():
        count += 1
print(count)  # 3
T
Правило полного перебора

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

Подсчёт символов и групп символов

Для подсчёта заводят счётчик со значением \(0\). При выполнении условия счётчик увеличивается на единицу. Важно проверять именно то свойство, которое указано в условии: равенство символу, принадлежность диапазону или наличие в наборе допустимых символов.

\[c \leftarrow 0;\quad c \leftarrow c+1\text{, если символ подходит}\]1

Например, количество гласных можно считать проверкой ch in "аеёиоуыэюя". Если регистр не задан, строку удобно предварительно привести к одному виду методом lower(). Для цифр используют ch.isdigit(), для букв — ch.isalpha(), но в экзаменационных задачах часто надёжнее явно задавать диапазоны или набор символов.

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

Микро-проверка

Что напечатает программа?

Python
s = "a1b2"
k = 0
for ch in s:
    if ch.isdigit():
        k += 1
print(k)

Замена и построение новой строки

Строки в Python неизменяемы: нельзя присвоить новое значение отдельному символу выражением s[i] = .... Поэтому при замене символов создают новую строку. На каждом шаге к ней добавляют либо заменённый символ, либо исходный.

\[r \leftarrow r + \begin{cases}q, & \text{если } ch=p,\\ ch, & \text{иначе.}\end{cases}\]2
Python
s = "каша"
r = ""
for ch in s:
    if ch == "а":
        r += "о"
    else:
        r += ch
print(r)  # кошо
Удобный шаблон

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

Если нужно заменить один фиксированный символ, можно использовать replace(), но посимвольный алгоритм лучше показывает логику и позволяет применять сложное условие: заменять только цифры, только символы на чётных позициях или только символы после определённого знака.

Проверка свойств всей строки

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

T
Флаг найденного

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

Python
s = "room 42"
found = False
for ch in s:
    if ch == " ":
        found = True
print(found)  # True

Для проверки условия «все символы подходят» применяют флаг ошибки: сначала считают, что строка правильная, а при первом нарушении меняют значение на False. Можно завершить цикл командой break, если дальнейший просмотр не нужен.

№
Разобранный пример

Дана жол. Требуется заменить все цифры символом # и подсчитать количество замен. Обрабатываем строку один раз: проверяем каждый символ, увеличиваем счётчик и добавляем нужный символ в результат.

Пусть дана жол a7bc12. Проследим состояние переменных после каждого шага.

1
До начала обработки результат пуст, число найденных цифр равно нулю.
\(\displaystyle r="",\quad k=0\)
2
Символ a не является цифрой, поэтому добавляем его без изменения.
\(\displaystyle r="a",\quad k=0\)
3
Символ 7 заменяем на # и увеличиваем счётчик.
\(\displaystyle r="a#",\quad k=1\)
4
Символы b и c добавляем без изменений.
\(\displaystyle r="a#bc",\quad k=1\)
5
Символ 1 заменяем на #.
\(\displaystyle r="a#bc#",\quad k=2\)
6
Символ 2 также заменяем на #. Получаем окончательный ответ.
\(\displaystyle r="a#bc###",\quad k=3\)
Python
s = "a7bc12"
r = ""
k = 0
for ch in s:
    if ch.isdigit():
        r += "#"
        k += 1
    else:
        r += ch
print(r)
print(k)

Результат программы: a#bc### и 3. Один цикл одновременно выполняет две независимые операции: строит новую строку и считает заменённые символы. Это безопаснее, чем пытаться повторно искать цифры уже изменённой строки.

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

1. Счётчик не обнуляют перед циклом. 2. Увеличивают счётчик в ветви else, хотя считать нужно подходящие символы. 3. Забывают добавить в результат символы, которые не заменяются. 4. Пытаются изменить s[i] напрямую. 5. При проверке «все символы» используют флаг найденного, хотя нужен флаг нарушения. 6. Не учитывают регистр: A и a — разные символы.

Практический алгоритм и связь с другими задачами

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

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

Q
Жылдам тест по теме

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

~ 2 мин4 вопроса
Вопрос 1 / 4
Вопрос 1 из 4 · счётчик
Какое начальное значение обычно имеет счётчик количества найденных символов?
Главное за минуту

Главное

  • Посимвольный перебор просматривает строку слева направо, от первого символа до последнего.
  • Для подсчёта используют счётчик, для поиска — флаг, для замены — новую строку-результат.
  • Строки в Python неизменяемы, поэтому отдельные символы не заменяют присваиванием.
  • Один проход по строке обычно имеет сложность \(O(n)\); перед кодированием нужно точно определить правило для бір символа.
  • Всегда проверяйте пустую строку, отсутствие подходящих символов и различие регистра.