Россия и Беларусь начали и продолжают войну против народа Украины!

Урок №203. Доступ к символам std::string. Конвертация std::string в строки C-style

  Юрий  | 

  |

  Обновл. 15 Сен 2021  | 

 19774

 ǀ   2 

На этом уроке мы рассмотрим способы доступа к символам std::string и способы конвертации std::string в строки C-style.

Доступ к символам std::string

Есть два практически идентичных способа доступа к символам std::string. Наиболее простой и быстрый — использовать перегруженный оператор индексации [].

char& string::operator[](size_type nIndex)
const char& string::operator[](size_type nIndex) const

   Обе эти функции возвращают символ под индексом nIndex.

   Передача неверного индекса приведет к неопределенным результатам.

   Использование функции length() в качестве индекса допустимо только для константных строк и возвращает значение, сгенерированное конструктором по умолчанию std::string. Это не рекомендуется делать.

   Поскольку char& — это тип возврата, то вы можете использовать его для изменения символов строки.

Например:

Результат:

e
abcdAfg

Другой способ доступа к символам std::string медленнее, чем вышеприведенный вариант, так как использует исключения для проверки корректности nIndex. Если вы не уверены в корректности передаваемого nIndex, то вы должны использовать именно этот способ (тот, что описан ниже) для доступа к символам строки.

char& string::at(size_type nIndex)
const char& string::at(size_type nIndex) const

   Обе эти функции возвращают символ под индексом nIndex.

   Передача неверного индекса приведет к генерации исключения out_of_range.

   Поскольку char& — это тип возврата, то вы можете использовать его для изменения символов строки.

Например:

Результат:

e
abcdAfg

Конвертация std::string в строки C-style


Многие функции (включая все функции языка C++) ожидают форматирования строк как строк C-style, а не как std::string. По этой причине std::string предоставляет 3 разных способа конвертации std::string в строки C-style.

const char* string::c_str() const

   Возвращает содержимое std::string в виде константной строки C-style.

   Добавляется нуль-терминатор.

   Строка C-style принадлежит std::string и не должна быть удалена.

Например:

Результат:

7

const char* string::data() const

   Возвращает содержимое std::string в виде константной строки C-style.

   Не добавляется нуль-терминатор.

   Строка C-style принадлежит std::string и не должна быть удалена.

Например:

Результат:

The strings are equal

size_type string::copy(char *szBuf, size_type nLength) const
size_type string::copy(char *szBuf, size_type nLength, size_type nIndex) const

   Отличие второго варианта этой функции от первого состоит в том, что копирование не более nLength символов передаваемой строки в szBuf начинается с символа под индексом nIndex. В первой же функции копирование всегда начинается с символа под индексом [0].

   Количество скопированных символов возвращается.

   Caller отвечает за то, чтобы не произошло переполнения строки szBuf.

Например:

Результат:

ipsum

Если вы не гонитесь за максимальной эффективностью, то c_str() — это самый простой и безопасный способ конвертации std::string в строки C-style.

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (81 оценок, среднее: 4,80 из 5)
Загрузка...

Комментариев: 2

  1. rrrrr:

    в крайнем примере не помешает

    1. Илья:

      Только в Visual Studio

Добавить комментарий

Ваш E-mail не будет опубликован. Обязательные поля помечены *