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); // 5std::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 — локальная установка не требуется.
Все уроки этого курса
- std::string и массивы символов в стиле C
- Операции со строками: объединение, подстрока, поиск и замена
- Строковый поток stringstream для разбора
- Преобразование строк: to_string и stoi