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

  Юрий  | 

    | 

  Обновл. 21 Янв 2019  | 

 1235

 ǀ   1 

В этом уроке мы рассмотрим способы доступа к символам 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.

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

   caller ответственный за то, чтобы с szBuf не произошло переполнение.

Например:

Результат:

ipsum

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

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

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

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

  1. Аватар rrrrr:

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

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

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