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

Обработка строк

Подсчёт символов, выделение фрагментов, замены и типовые алгоритмы обработки текста
6 мин чтенияСложность: Обновлено 29 сентября 2026

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

Строка, символ и индекс

Строка — последовательность символов: букв, цифр, пробелов и знаков препинания. В Python строка записывается в кавычках: s = "Информатика". Каждый символ имеет позицию — индекс. Отсчёт индексов начинается с нуля: первый символ имеет индекс 0, второй — индекс 1.

D
Основные понятия

Длина строки — количество символов в ней. Индекс — номер символа в строке. Подстрока — непрерывный фрагмент строки. Пробел также является символом и учитывается при подсчёте длины.

\[\operatorname{len}(s)=n,\qquad s[0],s[1],\ldots,s[n-1]\]

В Python длину получают функцией len(s), а символ с индексом i — выражением s[i]. Последний символ имеет индекс len(s) - 1. Отрицательные индексы отсчитываются с конца: s[-1] — последний символ. Если нужен последовательный просмотр всей строки, используют цикл, чаще всего for.

Python
s = "Кот"
print(len(s))  # 3
print(s[0])    # К
print(s[-1])   # т
!
Частая ошибка

Не путайте индекс и количество символов. У строки длины 5 индексы равны 0, 1, 2, 3, 4; индекса 5 нет. Ошибка s[5] приведёт к выходу за границы строки.

Подсчёт символов и проверка условий

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

\[c=\sum_{i=0}^{n-1}[P(s[i])]\]

Здесь \([P]\) равно 1, если условие \(P\) истинно, и 0 в противном случае. В программе условие записывается через if. Сравнивать можно конкретные символы, например s[i] == 'а', или принадлежность набору: s[i] in 'аеёиоуыэюя'.

Python
s = input()
count = 0
for ch in s:
    if ch.isdigit():
        count += 1
print(count)

Методы isdigit(), isalpha() и isspace() проверяют, является ли символ цифрой, буквой или пробельным символом. Для экзаменационного алгоритма часто надёжнее явно записать условие, если требуется учитывать только определённые символы или регистр.

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

Если нужно посчитать объекты, удовлетворяющие условию, начните с \(c=0\) и увеличивайте \(c\) ровно один раз за каждый найденный объект. После цикла значение \(c\) и есть ответ.

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

Какое значение примет count после выполнения кода для строки "АБВ123"? count = 0; for ch in s: if ch.isdigit(): count += 1

Выделение фрагментов строки

Индекс символа помогает обратиться к одному символу, а срез выделяет фрагмент. Запись s[a:b] содержит символы с индексами от a до b - 1: правая граница не включается. Поэтому количество символов в срезе равно b - a.

\[s[a:b]=s[a]s[a+1]\ldots s[b-1],\qquad |s[a:b]|=b-a\]

Примеры: s[2:5] — символы с индексами 2, 3 и 4; s[:4] — начало до индекса 4; s[3:] — от индекса 3 до конца; s[:] — копия всей строки. Срез с шагом записывают как s[a:b:k]. Например, s[::-1] разворачивает строку.

№
Как читать срез

Пусть s = "алгоритм". Тогда s[1:4] равно "лго": индекс 1 указывает на «л», индекс 4 уже не входит в результат. Ошибка «включить правую границу» — одна из самых распространённых.

Поиск, замена и разбиение

Для проверки наличия фрагмента используют оператор in: if "abc" in s. Метод find возвращает индекс первого вхождения или -1, если фрагмент не найден. Подробный поиск по строке рассматривается на странице поиск в строке.

Метод replace(old, new) создаёт новую строку, где все вхождения old заменены на new. Исходная строка не изменяется, потому что строки неизменяемы. Поэтому результат нужно сохранить: s = s.replace("-", " "). Для замены только первых k вхождений используют третий аргумент: s.replace(old, new, k).

Метод split разделяет строку на список частей по разделителю: words = s.split(" "). Если разделитель не указан, последовательности пробельных символов обрабатываются удобнее: s.split(). Обратная операция — конкатенация строк; например, " ".join(words) соединяет элементы пробелами.

!
Частые ошибки при замене

Метод replace не меняет строку «на месте». Запись s.replace("a", "b") без присваивания не сохраняет результат. Кроме того, замена может изменить длину строки, поэтому индексы, найденные до замены, иногда становятся неверными.

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

Задача экзаменационного типа: дана строка из латинских букв и пробелов. Посчитать количество слов, которые начинаются с буквы «a» или «A». Словом считается последовательность непробельных символов.

1
Сначала разделим строку на слова. Метод split без аргумента убирает лишние пробелы и не создаёт пустые элементы.
words=s.split()
2
Каждое слово нужно проверить по первому символу. У непустого слова первый символ имеет индекс 0.
\(\displaystyle w[0]\in\{\text{'a'},\text{'A'}\}\)
3
Заведём счётчик и увеличим его для каждого подходящего слова.
\(\displaystyle c=\sum_{w\in words}[w[0]=\text{'a'}\ \lor\ w[0]=\text{'A'}]\)
Python
s = input()
words = s.split()
count = 0
for word in words:
    if word[0] == 'a' or word[0] == 'A':
        count += 1
print(count)
Показать проверку на примере Решение

Для строки "An apple is amazing" метод split даст список ["An", "apple", "is", "amazing"]. Первые символы: A, a, i, a. Подходят три слова: An, apple и amazing. Программа выведет 3.

Удобная нормализация регистра

Если регистр не должен иметь значения, можно привести строку или слово к нижнему регистру: word = word.lower(). Тогда условие становится word[0] == 'a'. Не применяйте lower(), если в задаче различаются прописные и строчные буквы.

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

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

Python
s = input()
result = ""
for ch in s:
    if ch != ' ':
        result += ch
print(result)

Для больших строк эффективнее собрать символы в список, а затем соединить их методом join. Однако в школьных задачах обычная конкатенация часто проще и вполне подходит.

Алгоритм обработки текста

1. Определите, что считается символом или словом. 2. Решите, нужен ли исходный индекс или достаточно прохода for ch in s. 3. Выберите счётчик, строку-результат или список. 4. Проверьте пустую строку, пробелы, регистр и границы среза.

Quick-test

Q
Быстрый тест по теме

Проверь себя

~ 2 мин4 вопроса
Вопрос 1 / 4
Вопрос 1 из 4 · Срезы
Какой срез строки s содержит символы с индексами 2, 3 и 4?
Главное за минуту

Главное

  • Длина строки равна len(s), а индексы символов имеют значения от 0 до len(s) - 1.
  • Срез s[a:b] включает левую границу и не включает правую.
  • Для подсчёта используют счётчик и цикл, увеличивая его при выполнении условия.
  • replace создаёт новую строку; split превращает строку в список частей, а join соединяет части.
  • Перед решением уточняйте, учитываются ли пробелы, регистр, пустые фрагменты и границы среза.