NSU Programming Программирование на C++ и Python

Строки в C++

Для работы со строкам в C++ используется тип string. В разделе про потоки мы уже создавали объекты типа string и использовали их с операторами << и >>. Рассмотрим этот тип подробнее.

Примеры создания объектов string:

string a;           // пустая строка
string b("abc");    // строка проинициализирована списком символов
string c1(b);       // c1 является копией b
string c2 = b;      // c2 является копией b
string d('d', 10);  // d = "dddddddddd"

Строки хранят в памяти последовательность объектов char, поэтому во многих случаях со строками можно работать как с массивом. Например, обращаться к символам через индекс.

string a("abz");
char c = a[2];     // 'z'
char b = a.at(1);  // 'b'
a[2] = 'c';        // a = "abc"

Механизмы обращения к элементу через оператор [] и с помощью метода at() отличаются. В первом случае не происходит проверки того, что индекс меньше, чем длина строки. Если это условие не выполняется, то мы приходим к ситуации неопределенного поведения. Метод at() выполняет эту проверку и генерирует исключение в случае некорректного индекса. За это более безопасное поведение мы платим процессорным временем для дополнительной проверки.

По символам строки можно пройти в цикле:

string s("abcde");

for (char ch : s) {
    cout << ch << ' ';
}

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

Строки можно конкатенировать с помощью оператора + или метода append:

string a("Hello, ");
string b("world!");
string c = a + b;  // "Hello, world!"
a.append(b);       // a = "Hello, world!"
a += b;            // a = "Hello, world!world!"

Добавить символ в конец строки можно с помощью метода push_back(), а удалить последний символ - с помощью метода pop_back().

Для строк определены все операторы сравнения ==, !=, >, <, >=, <=, выполняющие лексикографическое сравнение.

В типе string реализованы некоторые алгоритмы. Например, можно осуществлять поиск по строке:

string line("There are two needles in this haystack with needles.");
string query("needle");

size_t found = line.find(query);  // found = 14
if (found != string::npos) {
    cout << "first '" << query << "' found at: " << found << '\n';
}

Метод find() возвращает позицию первого символа, которому соответствует совпадение. Если совпадений не найдено, возвращается специальная константа. size_t - это беззнаковый целочисленный тип.

Больше возможностей типа string можно найти в документации.

Документация