C++
Как проверить большая или маленькая буква в C++: isupper, islower и русские символы
Чтобы проверить, большая или маленькая буква в C++, для обычных английских символов используют функции std::isupper и std::islower из заголовка <cctype>
Пример:
#include <cctype>
#include <iostream>
int main() {
char ch = 'A';
if (std::isupper(static_cast<unsigned char>(ch))) {
std::cout << "Большая буква\n";
} else if (std::islower(static_cast<unsigned char>(ch))) {
std::cout << "Маленькая буква\n";
} else {
std::cout << "Это не буква в нужном диапазоне\n";
}
return 0;
}
Для A программа выведет:
Большая буква
Почему нужен static_cast<unsigned char>
На cppreference и в хороших примерах часто пишут:
std::isupper(static_cast<unsigned char>(ch))
Это не лишняя сложность. Функции из <cctype> корректно принимают значение EOF или значение, представимое как unsigned char. Если передать отрицательное значение char, поведение может стать неопределенным. Для обычного английского текста вы можете не заметить проблему, но привычка приводить к unsigned char делает код безопаснее
Ручная проверка ASCII
Если вы точно работаете только с английскими буквами, можно проверить диапазоны вручную:
#include <iostream>
int main() {
char ch = 'm';
if (ch >= 'A' && ch <= 'Z') {
std::cout << "Большая английская буква\n";
} else if (ch >= 'a' && ch <= 'z') {
std::cout << "Маленькая английская буква\n";
} else {
std::cout << "Не английская буква\n";
}
return 0;
}
Такой способ понятен для учебной задачи, но он работает только для ASCII-диапазона. Для кириллицы, акцентов и других алфавитов он не подходит
Проверить ввод пользователя
Пример с вводом одного символа:
#include <cctype>
#include <iostream>
int main() {
char ch;
std::cout << "Введите символ: ";
std::cin >> ch;
unsigned char value = static_cast<unsigned char>(ch);
if (std::isupper(value)) {
std::cout << "Верхний регистр\n";
} else if (std::islower(value)) {
std::cout << "Нижний регистр\n";
} else {
std::cout << "Не буква\n";
}
return 0;
}
Этот код хорошо подходит для английских букв в консольных задачах
Что возвращают isupper и islower
Функции std::isupper и std::islower возвращают не обязательно true или false, а целое число. Ноль означает «нет», ненулевое значение означает «да». Поэтому в условиях их обычно пишут напрямую:
if (std::isupper(static_cast<unsigned char>(ch))) {
std::cout << "Это заглавная буква\n";
}
Не нужно сравнивать результат строго с 1. На разных реализациях ненулевое значение может быть другим
Что делать с русскими буквами
С русскими буквами сложнее. В UTF-8 одна русская буква занимает несколько байтов, а char хранит один байт. Поэтому простой ввод в char не даст полноценной буквы
Если задача учебная и нужна только латиница, честно ограничьте условие: проверяем английские буквы. Если нужно работать с русским текстом, понадобится настройка локали, широкие символы или отдельная Unicode-библиотека. В этом случае простой код через char и <cctype> уже не закрывает задачу полностью
Частые ошибки
Сравнивать с русскими буквами в char
Код вроде:
if (ch >= 'А' && ch <= 'Я')
может работать не так, как ожидается, из-за кодировки и размера символов
Забыть подключить cctype
Для std::isupper и std::islower нужен заголовок:
#include <cctype>
Считать цифру маленькой буквой
std::islower('5') вернет ложь. Если нужно проверять цифры, используйте std::isdigit
Короткий вывод
Для английских букв используйте std::isupper и std::islower с приведением к unsigned char. Для учебной ASCII-задачи можно сравнивать диапазоны 'A'..'Z' и 'a'..'z'. Для русских букв нужен отдельный подход к кодировке
Связанные материалы:
Что почитать дальше по C++
Если нужен общий маршрут по теме, откройте рубрику C++. Для соседних задач пригодятся эти разборы:
- Как проверить символ char в C++: цифра, буква, пробел и сравнение
- Microsoft Visual C++: что скачать и как проверить
- Как проверить Visual C++ на Windows 10: runtime, компилятор и тестовый запуск
- Как проверить, есть ли символ в строке C++: find, npos и цикл