Классы u16string и u32string

Классы u16string и u32string предоставляют удобный интерфейс для работы со строками, содержащими символы типов char16_t и char32_t соответственно. Их названия являются лишь псевдонимами шаблонного класса basic_string:

typedef basic_string<char16_t> u16string;
typedef basic_string<char32_t> u32string;

Для использования классов u16string и u32string необходимо подключить файл string:

#include <string>

С объектами классов u16string и u32string можно производить такие же операции, как и с объектами класса string, а также использовать те же самые методы. Различие заключается в типах данных. Однако мы не можем использовать операторы ввода и вывода >> и <<, а также функцию getline(), т. к. классы потоков basic_istream<char16_t>, basic_istream<char32_t>, basic_ostream<char16_t> и basic_ostream<char32_t> не существуют. Придется преобразовывать кодировки и выполнять приведение типов самостоятельно (см. разд. 9.18).

Рассмотрим основные операции с экземплярами класса u16string, а также напишем функцию для вывода строки в окно консоли, внутри которой выполним приведение символов типа char16_t к типу wchar_t (листинге 9.2).

Листинг 9.2. Основные операции с экземплярами класса u16string

#include <iostream>
#include <clocale>
#include <string>

void println_u16string(const std::u16string &str) {
   if (sizeof(wchar_t) != 2) return;
   for (const char16_t &ch : str) {
      std::wcout << static_cast<wchar_t>(ch);
   }
   std::wcout << std::endl;
}

int main() {
   std::setlocale(LC_ALL, "Russian_Russia.1251");
   std::u16string str1(u"string"), str2(u"строка"), str3;
   str3 = str1 + u' ' + str2;              // Конкатенация
   println_u16string(str3);                // string строка
   str1[0] = u'S';                         // Доступ по индексу
   println_u16string(str1);                // String
   std::wcout << str1.size() << std::endl; // Длина (6)
   str2 = str1.substr(2, 3);               // Получение фрагмента
   println_u16string(str2);                // rin
   str1.replace(0, 4, u"****");            // Замена
   println_u16string(str1);                // ****ng
   return 0;
}

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов