Зміст

Широкі символи (wchar_t) в C++

Що таке широкі символи?

Стандарт ASCII обмежується лише 128 символами (коди від 0 до 127). Кодова таблиця Unicode має коди від 0 до 1114111 (0x10FFFF), включаючи всі мови світу, емодзі та графічні символи. Тому, якщо потрібні символи з кодами понад 127, слід використовувати Unicode.

Навіщо використовувати wchar_t?

Введення та виведення широких символів

Для цього використовують wcin і wcout замість cin і cout.

Приклад програми: підрахунок кириличних та латинських літер

#include <iostream>      // підключаємо бібліотеку для введення/виведення
#include <clocale>       // для встановлення локалі
#include <limits>        // для numeric_limits

using namespace std;

// Функція перевіряє, чи є символ кириличною літерою
bool isCyrillicChar(wchar_t c) {
    return (c >= L'а' && c <= L'я') || (c >= L'А' && c <= L'Я');
}

int main() {
    setlocale(LC_ALL, ""); // встановлюємо локаль для підтримки Юнікоду

    wcout << L"Введіть кількість символів: ";
    int numCharacters;
    wcin >> numCharacters;

    // Очищення буфера вводу від залишкових символів (наприклад, '\n')
    wcin.ignore(numeric_limits<streamsize>::max(), L'\n');

    wcout << L"Введіть символи: ";
    wchar_t inputChar;
    int cyrillicCount = 0; // лічильник кириличних літер
    int latinCount = 0;   // лічильник латинських літер

    for (int i = 0; i < numCharacters; ++i) {
        wcin >> inputChar; // зчитуємо символ

        // перевіряємо, чи латинська літера
        if ((inputChar >= L'a' && inputChar <= L'z') ||
            (inputChar >= L'A' && inputChar <= L'Z')) {
            latinCount++;
        }
        // перевіряємо, чи кирилична літера
        else if (isCyrillicChar(inputChar)) {
            cyrillicCount++;
        }
    }

    int totalLetters = cyrillicCount + latinCount;
    wcout << L"Кількість кириличних та англійських літер: " << totalLetters << endl;
    return 0;
}

Пояснення

wcin.ignore(numeric_limits<streamsize>::max(), L'\n');
– очищує буфер вводу після зчитування чисел чи рядків, щоб уникнути пропусків під час подальшого читання.

Задачі для практики

  1. Ввести з клавіатури n довільних символів. Скільки серед них цифр?
  2. Скільки серед них не цифр?
  3. Скільки англійських літер?
  4. Скільки літер загалом?
  5. Чи всі вони літери?
  6. Скільки не літер?
  7. Скільки літер і цифр разом?
  8. Скільки знаків пунктуації?
  9. Чи всі вони цифри?
  10. Скільки великих літер?
  11. Скільки малих літер?
  12. Скільки великих англійських літер?
  13. Скільки малих англійських літер?
  14. Перетворити всі на малі літери.
  15. Перетворити всі на великі літери.
  16. Вивести їх коди.
  17. Ввести n цілих чисел та вивести символи з такими кодами.

Зміст