C++ Урок 11: Символы и строки, вывод кириллицы

Ранее мы работали со строками, используя заголовочный файл <string> и тип данных string. Теперь рассмотрим более фундаментальный подход, основанный на типе данных char. Тип char представляет отдельный символ, а string — набор символов, то есть массив символов char.

Вывод кириллицы

Проблема вывода кириллицы в C++ возникает из-за того, что компьютер работает с нулями и единицами, а каждая буква имеет свой числовой код. По умолчанию компилятор корректно обрабатывает только латиницу. Для вывода кириллицы укажите кодировку.

В Windows стандартной кодировкой является Unicode (UTF-8). В C++ для её использования применяется функция setlocale из заголовочного файла <clocale>.

Практическое применение

Для вывода кириллицы:

  1. Подключите заголовочный файл: #include <clocale>
  2. Используйте функцию setlocale: setlocale(LC_CTYPE, "rus"); (или setlocale(LC_CTYPE, "Russian");)

Функция setlocale принимает два параметра: LC_CTYPE (тип символов) и строку, определяющую локаль (здесь — русский язык). Вызов setlocale должен быть до вывода текста на экран.

Работа с другими средами

В средах, отличных от Xcode (например, Visual Studio или Borland), для корректного отображения кириллицы может потребоваться подключение заголовочного файла <windows.h> и использование функций SetConsoleCP и SetConsoleOutputCP с кодировкой 1251. Это решение специфично для Windows и не работает на macOS.

#include <windows.h>
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

В Xcode подключение <windows.h> вызовет ошибку.

Работа с символами и строками

Символы

Тип данных char хранит отдельный символ:

char sim = 'D';

Строки как массивы символов

Строка — это массив символов char. Можно объявить строку, указав её размер:

char string[6] = {'H', 'e', 'l', 'l', 'o', ''}; //  - нуль-терминатор

Нуль-терминатор () занимает дополнительную ячейку памяти и сигнализирует о конце строки.

Более удобный способ:

char string[] = "Hello"; // Компилятор сам определит размер

Компилятор автоматически добавит нуль-терминатор. Перебор элементов строки аналогичен перебору массива.

Функция gets

Функция gets считывает строку с клавиатуры, включая пробелы. Она небезопасна, так как может привести к переполнению буфера. Более безопасные альтернативы есть в <string>.

char str[500];
gets(str); // Небезопасная функция!
puts(str); // Вывод строки

Функции для работы со строками

Многие функции работают со строками в C++. Ознакомьтесь с ними в документации (например, cppstudio.com). Например, strlen определяет длину строки (без нуль-терминатора).

Рассмотрена работа с символами и строками в C++, включая вывод кириллицы, объявление и использование строк как массивов символов, а также небезопасную функцию gets. Для получения более подробной информации о функциях работы со строками обратитесь к документации и онлайн-ресурсам.

Что будем искать? Например,программа