string::substr в C++: получение частей строк
Привет! В этой статье мы сосредоточимся на полезной функции C++ для работы со строками: substr. Начнем с обзора этой функции, разберемся, как правильно ее использовать, а затем рассмотрим несколько примеров для того, чтобы лучше ее понять. В конце вы найдете упражнения для закрепления материала.
Как извлечь часть строки в C++
Чтобы взять конкретную часть строки в C++, функция substr приходит на помощь:
string substr(size_t pos = 0, size_t len = npos) const;- Функция начинает работать с символа на позиции
pos. - Она извлекает
lenсимволов оттуда или берет символы до конца, еслиlenне указан или если в строке мало символов.
Давайте рассмотрим простой код, где мы используем substr:
#include <iostream>
#include <string>
using namespace std;
int main() {
string sentence = "abc + def = abcdef";
cout << "Часть строки: " << sentence.substr(6, 3) << endl; // Вывод: def
return 0;
}В приведенном выше примере программа извлекает “def” из строки. Начиная с позиции 6 (помните, мы начинаем считать с 0), она извлекает 3 символа.
Но что, если мы не укажем длину или укажем значение, превышающее оставшуюся длину строки?
cout << "Извлеченная часть: " << sentence.substr(6) << endl; // Вывод: def = abcdefВ таких случаях substr просто извлекает все, начиная с начальной позиции до конца строки.
Важные замечания по substr
-
Позиция и длина: Начальная позиция,
pos, начинается с 0 (а не с 1). Если вы укажете позицию, равную длине строки, вы получите пустую строку. И еслиposпревысит длину строки, будет вызвано исключениеout_of_range. -
Тип переменных: Переменные
posиlenимеют типsize_t, что означает, что они могут содержать только неотрицательные значения. -
Сложность: Время работы
substrв основном зависит от длины извлекаемого участка. Обычно это быстро, но производительность может различаться в зависимости от компилятора и системы. -
Безопасность: Если вы сделаете что-то, что функция не может обработать, например, запросите позицию за пределами длины строки, будет вызвано исключение. Также будет вызвано исключение
bad_alloc, если попытка выделения памяти не удастся.