Строки: базовые операции
Введение: что такое строка
Строка — это упорядоченная последовательность символов, используемая для представления текста в программе. Строки встречаются во всех языках программирования и служат для хранения слов, предложений, чисел в текстовом виде и любых других символов. Они обычно невзаимозаменяемы с числами: операции, применимые к числам, не всегда имеют смысл для строк.
Важно понимать два уровня представления: логический (т.е. понятие «последовательности символов») и физический (кодировка и внутреннее хранение в памяти). К логическому уровню относятся операции над символами, о которых пойдет речь далее: индексация, срезы, конкатенация, сравнение и т.д.
Строка - упорядоченная последовательность символов, представляющая текстовую информацию.
Представление и литералы строк
Строковый литерал — это способ записать строку непосредственно в коде. Литералы могут быть в одинарных или двойных кавычках, часто поддерживаются многострочные литералы и специальные символы через экранирование. Экранирование позволяет вставлять в строку символы, которые иначе сломали бы синтаксис: например, символ новой строки или кавычки.
Литерал - запись значения напрямую в исходном коде программы.
При работе со строками часто упоминаются escape-последовательности, такие как символ новой строки. В тексте ниже вместо прямого отображения таких последовательностей используется специальный плейсхолдер для формул — это помогает избежать проблем с отображением символов.
Пример литерала с новой строкой:
Доступ к символам: индексация и длина
Индексация позволяет получить отдельный символ строки по его позиции. Обычно индексация начинается с нуля: первый символ имеет индекс ноль. Также распространено обращение с отрицательными индексами, где обозначает последний символ, — первый и т.д.
Длина строки — это количество символов в ней. Обозначение длины может быть записано разными способами; в тексте мы будем использовать плейсхолдер для выражения длины строки, например .
Если s — строка, то проверка «пуста ли строка» эквивалентна проверке .
Операции объединения и повторения
Конкатенация — операция соединения двух строк в одну. В языках программирования это часто выполняется оператором сложения строк. Запись с оператором соединения представлена как . Конкатенация сохраняет порядок символов: сначала идут символы первой строки, затем второй.
Повторение строки позволяет получить новую строку, состоящую из повторов исходной строки несколько раз. Такое действие часто обозначают оператором умножения строки на целое число; пример повторения строки три раза представлен как .
Пример: объединение имени и фамилии с пробелом — .
Срезы и извлечение подстрок
Срез (substring, slice) позволяет выделить часть строки, задав начальный и конечный индекс. Формат среза обычно включает начальный индекс, двоеточие и конечный индекс, например . При этом часть строки включает символы от начального индекса включительно до конечного индекса невключительно.
Кроме того, срезы могут задаваться с шагом — это позволяет брать каждый k‑й символ в интервале. Пример с шагом приведен как . Такие операции удобны для обхода, формирования подстрок и выборки символов по определенному правилу.
Практический пример: если s — строка, то подстрока от второго до пятого символа записывается как .
Поиск, замена и проверка вхождений
Для поиска подстроки в строке используются функции и методы, которые возвращают индекс первого вхождения или логическое значение о наличии подстроки. Операции поиска часто описываются специальными функциями; например, функция поиска может быть записана как , а проверка вхождения символа — как логическое выражение вида .
Замена — операция, создающая новую строку, в которой все или некоторые вхождения одной подстроки заменены другой. Общий вид такой операции можно записать как . Замена полезна при очистке текста, нормализации данных и подготовке к дальнейшей обработке.
Пример: заменить все вхождения символа ''a'' на ''b'' — .
Регистры, обрезка и разбивка
Положение регистра (верхний/нижний) важно при сравнении строк и при приведении текста к единому виду. Функции преобразования регистра часто обозначают как «to upper» и «to lower»; в нашем описании используем плейсхолдеры и соответственно.
Обрезка пробельных символов в начале и конце строки — частая операция предобработки текстов. Ее можно представить как функцию тримминга . Для разбиения строки на части по разделителю служит операция split, которую можно записать как . Обратная операция — объединение списка строк в одну — обычно называется join: .
Использование: сначала разбиваем строку по запятой — , затем собираем элементы обратно через точку с запятой — .
Сравнение строк и лексикографический порядок
Строки можно сравнивать между собой по лексикографическому (словному) порядку, аналогично словарной сортировке. Операторы равенства и неравенства позволяют проверить, совпадают ли строки (). Для упорядочивания строк могут применяться операторы меньше/больше, например .
При сравнении важно учитывать регистр и локаль: в некоторых языках и контекстах «А» и «а» считаются разными символами, а в некоторых операциях применяется нечувствительное к регистру сравнение. Частая практика — привести обе строки к одному регистру перед сравнением с помощью или .
Форматирование и объединение данных
Форматирование строк позволяет встроить значения переменных в текст в удобном для чтения виде. Существуют разные подходы: конкатенация нескольких частей, использование специальных функций форматирования и f‑строк в современных языках. Обобщенная запись форматирования может быть представлена как .
Форматирование удобно применять при выводе данных, подготовке сообщений об ошибках и формировании человекочитаемого представления сложных структур. Оно также важно при создании CSV‑строк, логов и отчетов, где формат должен быть строгим.
Пример форматирования имени и возраста через формат — .
Практические рекомендации и распространенные ошибки
Всегда имейте в виду неизменяемость строк в большинстве языков: операции обычно возвращают новую строку, не меняя исходную. Например, методы преобразования регистра или замены возвращают новую строку, а не модифицируют существующую переменную.
Не забывайте про корректную обработку индексов при работе со срезами и индексами — использование отрицательных индексов даёт удобный доступ с конца (см. ), но при выходе за границы возникает ошибка или пустая подстрока в зависимости от языка. При конкатенации и форматировании следите за типами данных — нечисловые значения часто нужно предварительно преобразовать в строку.
Задания для самопроверки
1) Данa строка s. Получите её первый и последний символы, используя операции индексации ( и ).
2) Объедините два слова s и t с пробелом между ними, используя операцию конкатенации () или её эквивалент .
3) Получите подстроку из s с третьего по седьмой символ, применяя срез . Как изменится запись, если нужен каждый второй символ в этом диапазоне ()?
Контрольный пример: проверить, пуста ли строка s, проверка эквивалентна выражению .