0Pricing
C++ Academy · Урок

std::string и массивы символов в стиле C

Сравните современный std::string с устаревшими массивами char, завершёнными нулём, и решите, когда использовать каждый вариант.

«std::string и массивы символов в стиле C» — бесплатный урок C++ Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C++ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C++ Academy содержит 4 уроков всего.

Два способа хранить текст

C++ поддерживает строки в стиле C — массивы char, завершающиеся нулём, — и добавляет std::string из стандартной библиотеки. Почти всегда используйте std::string.

Строки в стиле C

Строка в стиле C — это последовательность элементов char, завершающаяся нулевым байтом '\0'. Функции вроде strlen проходят по массиву, пока не найдут нулевой байт.

const char* greeting = "Hello";
// Memory: H, e, l, l, o, \0  (6 bytes)

#include <cstring>
std::cout << std::strlen(greeting);  // 5

std::string

std::string самостоятельно управляет памятью и при необходимости увеличивается. Создавайте его так же, как любой другой тип.

#include <string>
std::string name = "Ada";
name += " Lovelace";
std::cout << name;  // Ada Lovelace

Размер и длина

std::string::size() и length() — синонимы, возвращающие количество символов (завершающий нулевой символ не учитывается).

std::string s = "hello";
std::cout << s.size();   // 5
std::cout << s.length(); // 5

Доступ по индексу

Читайте и изменяйте символы с помощью [] или at(). В отличие от [], at() выдаёт исключение, если индекс выходит за границы.

std::string s = "cat";
char first = s[0];        // 'c'
char last  = s.at(2);     // 't'
// s.at(10) throws std::out_of_range

Пустые строки

Используйте empty() вместо size() == 0. Так код понятнее, а скорость та же.

Когда использовать const char*

Используйте строку в стиле C, когда:

  • Взаимодействуете с библиотеками C или API операционной системы
  • Работаете со строковыми литералами, которые никогда не изменяются
  • Разрабатываете для встроенных систем, где стандартная библиотека недоступна

Преобразование между ними

Получите строку C из std::string с помощью .c_str(). Создать std::string непосредственно из const char* можно напрямую.

std::string s = "Hello";
const char* c = s.c_str();

const char* literal = "world";
std::string s2(literal);

Строковые литералы имеют тип const char[]

Строковый литерал вроде "hi" имеет тип const char[3] (включая завершающий нулевой символ). Он хранится в памяти только для чтения.

Сырые строковые литералы

Добавьте префикс R"(...)", чтобы пропустить обработку escape-последовательностей. Это полезно для шаблонов регулярных выражений и путей к файлам.

std::string regex = R"(\d+\.\d{2})";
std::string path  = R"(C:\Users\Ada)";

Перебор std::string

Строки являются контейнерами. Перебирайте их с помощью цикла for по диапазону, индексов или итераторов.

std::string s = "abc";
for (char c : s) std::cout << c << " ";  // a b c

Быстрая проверка

Какой метод std::string выдаёт исключение, если индекс выходит за границы?

Итоги

Для управляемого текста предпочитайте std::string. Используйте const char* для литералов и взаимодействия с API C. Преобразуйте между ними с помощью .c_str() и прямого создания объекта.

Часто задаваемые вопросы

Урок «std::string и массивы символов в стиле C» бесплатный?

Да — полный текст урока «std::string и массивы символов в стиле C» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C++ Academy, подпишись на CoddyKit PRO. Курс C++ Academy содержит 4 уроков всего.

Чему я научусь в уроке «std::string и массивы символов в стиле C»?

Сравните современный std::string с устаревшими массивами char, завершёнными нулём, и решите, когда использовать каждый вариант. Ты практикуешь C++ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C++ Academy?

Предыдущий опыт не требуется. C++ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «std::string и массивы символов в стиле C»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C++ Academy?

Да. Каждый урок C++ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. std::string и массивы символов в стиле C
  2. Операции со строками: объединение, подстрока, поиск и замена
  3. Строковый поток stringstream для разбора
  4. Преобразование строк: to_string и stoi
← Назад к C++ Academy