Урок №201. Создание, уничтожение и конвертация std::string

  Юрий  | 

  Обновл. 2 Июл 2019  | 

 2919

 ǀ   1 

В этом уроке мы рассмотрим то, как создаются объекты std::string, а также то, как создавать строки из чисел и наоборот.

Создание std::string

Строковые классы имеют ряд конструкторов и деструктор, которые можно использовать для создания строк. Мы рассмотрим каждый из них.

string::string()


   Конструктор по умолчанию, который создаёт пустую строку.

Например:

Результат:

 

string::string(const string& strString)

   Конструктор копирования, который создаёт новую строку путём копирования strString.

Например:

Результат:

What a string!

string::string(const string& strString, size_type unIndex)
string::string(const string& strString, size_type unIndex, size_type unLength)


   Конструкторы, которые создают новые строки, которые состоят из строки strString (начиная с индекса unIndex) и количества символов, указанных в unLength.

   Если компилятор встречает NULL, то копирование строки завершается, даже если unLength не был достигнут.

   Если unLength не был указан, то все символы, начиная с unIndex, будут использованы.

   Если unIndex больше, чем размер строки, то выбрасывается исключение out_of_range.

Например:

Результат:

t a string
a stri

string::string(const char *szCString)

   Конструктор, который создаёт новую строку из передаваемой строки C-style szCString вплоть до нуль-терминатора (но его не включает). Если размер результата превышает максимальную длину строки, то генерируется исключение length_error.

   Предупреждение: szCString не должен быть NULL.

Например:

Результат:

What a string!

string::string(const char *szCString, size_type unLength)


   Конструктор, который создаёт новую строку из строки C-style szCString с количеством символов, указанных в unLength.

   Если размер результата превышает максимальную длину строки, то генерируется исключение length_error.

   Предупреждение: Только для этого конструктора значение NULL не обрабатывается как объект, указывающий на завершение строки szCString! Это означает, что компилятор дойдёт до конца строки (если это позволяет unLength), даже если встретит по дороге NULL.

Например:

Результат:

What a

string::string(size_type nNum, char chChar)

   Конструктор, который создаёт новую строку, инициализированную символом chChar и требуемым количеством вхождений этого символа (указывается в nNum).

   Если размер результата превышает максимальную длину строки, то генерируется исключение length_error.

Например:

Результат:

GGGGG

template string::string(InputIterator itBeg, InputIterator itEnd)


   Конструктор, который создаёт новую строку, инициализированную символами диапазона [itBeg, itEnd).

   Если размер результата превышает максимальную длину строки, то генерируется исключение length_error.

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

string::~string()

   Деструктор, который уничтожает строку и освобождает память.

Примера нет, так как деструктор вызывается неявно.

Создание std::string из чисел

Одно заметное упущение в классе std::string — это отсутствие возможности создавать строки из чисел. Например:

Здесь мы получим ошибку: неудачная конвертация значения типа int в std::basic_string. Самый простой способ конвертировать числа в строки — это задействовать класс std::ostringstream, который находится в заголовочном файле sstream. std::ostringstream уже настроен для приёма разных входных данных: символов, чисел, строк и т.д. А с помощью std::istringstream можно выполнять обратную конвертацию — выводить строки (либо через оператор вывода >>, либо через функцию str()).

Например, создадим std::string из разных входных данных:

Результат:

5
7.8
B

Обратите внимание, здесь отсутствует проверка на ошибки. Может случиться так, что конвертация tX в std::string будет неудачной. В таком случае, хорошим вариантом было бы подключить генерацию исключения.

Конвертация std::string в числа

Аналогично решению выше:

Результат:

4.5

Обратите внимание, наша вторая конвертация потерпела неудачу, и мы получили false.

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

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

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

  1. Аватар kmish:

    Пример с template string::string(InputIterator itBeg, InputIterator itEnd):

    Результат:

    What a string!
    hat a strin

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

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

telegram канал
НОВОСТИ RAVESLI