В этой статье мы поговорим о классе string, который включен в стандартную библиотеку языка программирования C++. Одновременно с этим рассмотрим основы работы со строками: изучим конструкторы, арифметические операторы и некоторые методы.

В языке программирования C++ существует специальный класс string, обеспечивающий удобство работы со строковыми данными. Для его применения нет необходимости выполнять хитрые манипуляции — достаточно просто подключить соответствующий заголовочный файл string.

Если вспомнить тот же Си, то там существует заголовочный файл стандартной библиотеки, который называется string.h. Он содержит функции, необходимые для работы с памятью и нуль-терминированными строками. На практике функции, объявленные в string.h, применяются довольно широко, так как являются частью стандартной библиотеки, в результате чего стабильно работают на любых платформах, которые поддерживают язык программирования Си.

Но вернемся к С++. На практике вы можете не просто объявлять строки, но и одновременно с этим присваивать им значения:

Строки в C++

В нашем случае S1 будет являться пустой, а S2 — состоять из пяти символов.

Идем дальше. К отдельным символам вы можете обращаться по индексу, как к элементам массива. К примеру, S[0] позволит обратиться к первому строчному элементу (как и в массиве, нумерация начинается с нуля).

Если же надо узнать длину строки length, вы можете воспользоваться методом size(). К примеру, последний символ строки S можно выразить как S[S.size() - 1].

Конструкторы

При работе со строковыми данными возможно применение ряда конструкторов:

Строки в C++

Вызов конструкторов может быть явным, как в примере ниже:

Строки в C++

То есть мы осуществили вызов конструктора string в целях создания строчки, которая включает в себя 10 символов ‘z’.

Вызов бывает и неявным, что происходит в процессе объявления, когда указываются дополнительные параметры. Это может выглядеть следующим образом:

Строки в C++

Ввод-вывод

Вывод строчных значений осуществляется так же, как и числовых:

cout << S;

Если же надо выполнить считывание, используют операцию «>>» для объекта cin:

cin >> S;

Результатом вышеуказанной операции станет считывание строчки из непробельных символов, то есть пробелы и концы строк будут пропущены. Это довольно удобно, если надо разбить текст на слова либо в целях считывания данных до конца файла посредством while (cin >> S).

Есть возможность выполнять считывание и до появления символа конца строки — тут уже пригодится функция getline. А вот сам символ конца считывается уже из входного потока, правда, непосредственно к строке его добавление не происходит:

getline(cin S);

Арифметические операторы

Работая со строковыми данными, мы можем выполнять ряд арифметических операций, среди них:

  • = — для присваивания значения;
  • += — для добавления в конец какого-нибудь другого элемента (к примеру, числа) либо даже другой строки;
  • + — оператор конкатенации двух строк/строки и символа;
  • ==, != — для посимвольного сравнения;
  • <, >, <=, >= — для лексикографического сравнения.

Таким образом, мы можем выполнить копирование содержимого одной строки в другую посредством операции S1 = S2, далее выполнить их сравнение на равенство посредством S1 == S2, потом сравнить в лексикографическом порядке (S1 < S2) либо или выполнить конкатенацию (сложение) в виде S = S1 + S2.

Методы

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

size

Возвращает длину строки. Значение, которое таким образом возвращается, имеет беззнаковый тип (как и во всех других случаях, если функция возвращает значение, которое равняется длине строке либо индексу элемента, такие значения являются беззнаковыми). Именно поэтому следует предельно внимательно выполнять вычитание из значения, которое возвращается посредством size(). К примеру, будет ошибкой записать цикл, перебирающий все строчные элементы, кроме последнего, типа for (int i = 0; i < S.size() - 1; ++i).

Также длину строки можно возвратить с помощью метода length().

resize

S.resize(n) позволит изменить длину строки, причем новая длина станет равняться n. Важно понимать, что длина строки ведь может как увеличиться, так и уменьшится. Вызвав метод в виде S.resize(n, c), когда c — символ, вы получите ситуацию, при которой при увеличении строковой длины добавляемые элементы станут равняться c.

clear

S.clear() очистит строчку, в результате чего она станет пустой.

empty

S.empty() возвратит true, когда строчка будет пустой и false, когда непустой.

push_back

S.push_back(c) добавит в конец символ c. Этот метод вызывается с одним параметром, имеющим тип данных char.

append

Добавит в конец несколько символов, другую строчку либо ее фрагмент. Тут существует множество способов вызова:

  • S.append(n, c)— добавляется n одинаковых элементов, которые равны с. У n здесь целочисленный тип, а у c — char;
  • S.append(T) — добавляется содержимое T-строки. Причем T может быть как С-строчкой, так и объектом класса string;
  • S.append(T, pos, count) — добавляются символы T-строки, начиная с символа, имеющего индекс pos. Добавление происходит в количестве count.

Хотите знать про C++ больше? Получить нужные навыки вы сможете на курсах в Otus.

Строки в C++

Источник: https://server.179.ru/tasks/cpp/total/161.html.