Ранее, в статье по «библиотечным функциям» мы показывали вам различные заголовки, которые предоставляют многочисленные функции, работающие с разными типами данных. Заголовок <cctype.h> является одним из таких заголовков, который содержит набор функций, классифицирующих отдельные символы.
Функции, объявленные в заголовке <cctype.h>, принимают один символ (эквивалент int) в качестве параметра и возвращают целочисленное значение, которое может быть либо логическим, либо символьным значением. Значение 0 (ноль) указывает на ложь, а значение, отличное от 0 (не ноль), указывает на правду.
Эти односимвольные функции можно использовать в программе, включив заголовок <cctype.h>. Эти функции широко используются и считаются чрезвычайно полезны в программировании на C++ для тестирования и преобразования символов или манипулирования ими.
В этой статье мы обсудим различные функции символов и посмотрим, как каждую из этих функций можно использовать в программе.
Символьные Функции C++
Символьные функции C++ — это функции, которые принимают в качестве параметра только один символ (приведенный к типу int) и возвращают результат. Это могут быть функции классификации, такие как isalpha, isalnum, isdigit, islower, isupper и т. д., и функции преобразования, такие как toupper и tolower, которые преобразуют заданный символ в верхний или нижний регистр соответственно.
В заголовке <cctype.h> есть два типа функций.
Функции классификации символов
Функции классификации символов используются для проверки того, принадлежит ли одиночный символ, переданный в качестве аргумента функции, к определенной категории.
Мы свели в таблицу функции классификации символов, включенные в заголовок <cctype.h> ниже:
№ | Функция | Назначение |
1 | isalnum | Проверяет, является ли заданный символ буквенно-цифровым |
2 | isalpha | Проверяет, является ли символ буквенным |
3 | isblank | Проверяет, является ли символ пустым |
4 | iscntrl | Проверяет, является ли данный символ управляющим |
5 | isdigit | Проверяет, является ли данный символ десятичной цифрой |
6 | isgraph | Проверяет, есть ли у данного символа графическое представление |
7 | islower | Проверяет, является ли данный символ строчным |
8 | isprint | Проверяет, является ли символ печатным |
9 | ispunct | Проверяет, является ли символ знаком пунктуации |
10 | isspace | Проверяет, является ли символ пробелом |
11 | isupper | Проверяет, является ли данный символ заглавным |
12 | isxdigit | Проверяет, является ли символ шестнадцатеричной цифрой |
Функции преобразования символов
Функции преобразования символов преобразуют регистры. Следующие функции включены в файл <cctype.h>.
№ | Функция | Назначение функции |
1 | tolower | Преобразует прописные буквы в строчные |
2 | toupper | Преобразует строчные буквы в прописные |
Давайте подробно рассмотрим каждую из функций (классификация и преобразование). Мы также представим простой пример программирования на C++ для каждой из функций.
Isalnum
Прототип функции: int isalnum(int c);
Параметр(ы): c=> Символ, который следует проверять, является ли он буквенно-цифровым или нет.
Возвращаемое значение:
ненулевое значение => с является буквенно-цифровым
0 => не является буквенно-цифровым
Описание: Эта функция проверяет, является ли заданный символ буквенно-цифровым или нет. Буквенно-цифровой означает, что символ находится в диапазоне от A(a) до Z(z) или от 0 до 9.
В C++ эта функция зависит от локали, и ее определение находится в заголовке <locale>.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream> #include <cctype> using namespace std; int main() { char chary[12] = "Hello World"; // checking for isalnum() function for (int i=0; i<12; i++) { if (isalnum(chary [i])) cout << chary [i] << " is alphanumeric" << endl; else cout << chary [i] << " is not alphanumeric" << endl; } cout << endl; } |
Вывод данных:
H is alphanumeric
is alphanumeric
lis alphanumeric
l is a s alphanumeric
s alphanumeric
not alphanumeric
W is alphanumeric
o is alphanumeric
ris alphanumeric
lis alphanumeric
d is alphanumeric
is not alphanumeric
|
Isalpha
Прототип функции: int isalpha(int c);
Параметр(ы): c-> Символ, который нужно проверить, является ли он буквенным или нет.
Возвращаемое значение:
ненулевое => с является буквенным
0 => не по алфавиту
Описание: Эта функция проверяет, является ли данный символ буквенным, т.е. среди строчных и прописных букв. Как и isalnum, эта функция также зависит от используемой локали.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <iostream> #include <cctype> using namespace std; int main() { char ch_alpha[5] = "sth1"; for (int i=0; i<5; i++) { if (isalpha(ch_alpha[i])) cout << ch_alpha[i] << " is an alphabet" << endl; else cout << ch_alpha[i] << " is not an alphabet" << endl; } cout << endl; } |
Вывод данных:
an alphabet tis an alphabet h is an alphabet is not an alphabet is not an alphabet |
Isblank
Прототип функции: int isblank(int c);
Параметр(ы): c=> Проверяемый символ.
Возвращаемое значение:
ненулевой => символ пустой
0 => символ не пустой
Описание: Эта функция проверяет, является ли данный символ пробелом или нет. Пустой символ — это символ пробела, который используется для разделения слов в строке текста.
В C++ версия функции isblank для конкретной локали существует в <locale>.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> #include <cctype> using namespace std; int main() { char ch_alpha[6] = "s t h"; for (int i=0; i<6; i++) { if (isblank(ch_alpha[i])) cout << ch_alpha[i] << " is a blank" << endl; else cout << ch_alpha[i] << " is not a blank" << endl; } cout << endl; } |
Вывод данных:
is not a blank a blank is not a blank is a blank is not a blank is not a blank |
Обратите внимание на последнюю строку в выводе, которая говорит «не пустой». Это связано с тем, что последняя позиция массива символов не инициализируется значением, но все еще имеет позицию печати. Следовательно, она не пустая.
Iscntrl
Прототип функции: int iscntrl(int c);
Параметр(ы): c=> Проверяемый символ
Возвращаемое значение:
ненулевое значение => с является управляющим символом
0=> с не является управляющим символом
Описание: Функция проверяет, является ли данный параметр управляющим символом. Управляющий символ — это символ, который не отображается на дисплее или не занимает место для печати.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> #include <cctype> using namespace std; int main() { char ch_alpha[6] = "s\nt\th"; for (int i=0; i<6; i++) { if (iscntrl(ch_alpha[i])) cout << ch_alpha[i] << " is a control character" << endl; else cout << ch_alpha[i] << " is not a control character" << endl; } cout << endl; } |
Вывод данных:
is not a control character a control character is not a control character is a control character h is not a control character is a control character |
Isdigit
Прототип функции: int isdigit(int c)
Параметр(ы): c=> Символ, приведенный к типу int, значение которого должно быть проверено.
Возвращаемое значение: ненулевое значение => c — десятичная цифра
0=> c не является цифрой
Описание: Эта функция проверяет, является ли данный параметр десятичной цифрой или нет. Символ является десятичной цифрой, если его значение находится в диапазоне от 0 до 9.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> #include <cctype> using namespace std; int main() { char ch_alpha[5] = "a12b"; for (int i=0; i<5; i++) { if (isdigit(ch_alpha[i])) cout << ch_alpha[i] << " is a digit" << endl; else cout << ch_alpha[i] << " is not a digit" << endl; } cout << endl; } |
Вывод данных:
is not a digit is a digit 2 is a digit b is not a digit is not a digit |
Isgraph
Прототип функции: int isgraph(int c)
Параметр(ы): c=> Символ, приведенный к типу int, который проверяется с помощью функции isgraph.
Возвращаемое значение:
ненулевое значение => c является графическим представлением
0=> c не является графическим представлением
Описание: Функция проверяет, является ли заданный символ c символом с графическим представлением. Символ, который можно напечатать, — это символ с графическим представлением.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> #include <cctype> using namespace std; int main() { char ch_alpha[6] = "a~12b"; for (int i=0; i<6; i++) { if (isgraph(ch_alpha[i])) cout << ch_alpha[i] << " is a graphical character" << endl; else cout << ch_alpha[i] << " is not a graphical character" << endl; } cout << endl; } |
Вывод данных:
a is a graphical character is a graphical character l is a graphical character 2 is a graphical character b is a graphical character not a qraphical character |
Islower
Прототип функции: int islower(int c)
Параметр(ы): c=> Символ, который нужно проверить с помощью функции islower.
Возвращаемое значение:
ненулевое значение => c в нижнем регистре
0=> c не в нижнем регистре
Описание: Функция islower проверяет, является ли заданный символ c строчной буквой или нет.
Символ нижнего регистра — это тот, который имеет одно из значений: a b c d e f g h i j k l m n o p q r s t u v w x y z.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> #include <cctype> using namespace std; int main() { char ch_alpha[4] = "Sth"; for (int i=0; i<4; i++) { if (islower(ch_alpha[i])) cout << ch_alpha[i] << " is a lowercase character" << endl; else cout << ch_alpha[i] << " is not a lowercase character" << endl; } cout << endl; } |
Вывод данных:
is not a lowercase character is a lowercase character h is a lowercase character is not a lowercase character |
Isprint
Прототип функции: int isprint(int c)
Параметр(ы): c=> Символ, который нужно проверить с помощью функции isprint.
Возвращаемое значение:
ненулевое значение => c можно напечатать
0 => c не печатается
Описание: Функция isprint проверяет, является ли данный символ печатаемым. Печатный символ — это тот, который занимает позицию печати на дисплее.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> #include <cctype> using namespace std; int main() { char ch_alpha[4] = "Sth"; for (int i=0; i<4; i++) { if (isprint(ch_alpha[i])) cout << ch_alpha[i] << " is a printable character" << endl; else cout << ch_alpha[i] << " is not a printable character" << endl; } cout << endl; } |
Вывод данных:
is a printable character t is a printable character h is a printable character not a printable character |
Ispunct
Прототип функции: int ispunct(int c)
Параметр(ы): c=> Символ, который нужно проверить с помощью функции ispunct.
Возвращаемое значение:
ненулевое значение => c — знак пунктуации
0 => c не является знаком препинания
Описание: Эта функция проверяет, является ли данный символ знаком пунктуации. Символ, который является графическим (от isgraph), а не буквенно-цифровым (от isalnum), называется пунктуационным.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> #include <cctype> using namespace std; int main() { char ch_alpha[8] = "sth@123"; for (int i=0; i<8; i++) { if (ispunct(ch_alpha[i])) cout << ch_alpha[i] << " is a punctuation character" << endl; else cout << ch_alpha[i] << " is not a punctuation character" << endl; } cout << endl; } |
Вывод данных:
s not a punctuation character t is not a punctuation character h is not a punctuation character is a punctuation character l is not a punctuation character 2 is not a punctuation character 3 is not a punctuation character is not a punctuation character |
Isspace
Прототип функции: int isspace(int c)
Параметр(ы): c=> Символ, который нужно проверить с помощью функции isspace.
Возвращаемое значение:
ненулевое значение => c — это пробел
0=> c не является пробелом
Описание: Эта функция проверяет, является ли заданный символ пробелом. Для локали «C» пробельные символы могут быть любыми из следующих.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> #include <cctype> using namespace std; int main() { char ch_alpha[7] = "s\tt\rh"; for (int i=0; i<7; i++) { if (isspace(ch_alpha[i])) cout << ch_alpha[i] << " is a white space" << endl; else cout << ch_alpha[i] << " is not a white space" << endl; } cout << endl; } |
Вывод данных:
is not a a white space a white space is not a white space is a white space is not a white space is not a white space is not a white space |
Isupper
Прототип функции: int isupper(int c)
Параметр(ы): c=> Символ, который нужно проверить с помощью функции isupper.
Возвращаемое значение:
ненулевое значение => c в верхнем регистре
0=> c не в верхнем регистре
Описание: Функция islower проверяет, является ли данный символ c прописным или нет.
Символ верхнего регистра — это тот, который имеет одно из значений: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> #include <cctype> using namespace std; int main() { char ch_alpha[4] = "STh"; for (int i=0; i<4; i++) { if (isupper(ch_alpha[i])) cout << ch_alpha[i] << " is an uppercase character" << endl; else cout << ch_alpha[i] << " is not an uppercase character" << endl; } cout << endl; } |
Вывод данных:
is an uppercase character Tis an uppercase character h is not an uppercase character is not an uppercase character |
Isxdigit
Прототип функции: int isxdigit(int c)
Параметр(ы): c=> Символ, который нужно проверить с помощью функции isxdigit.
Возвращаемое значение:
ненулевое значение => c шестнадцатеричный
0=> c не является шестнадцатеричным
Описание: Эта функция проверяет, является ли данный символ шестнадцатеричной цифрой. Допустимые шестнадцатеричные: 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> #include <cctype> using namespace std; int main() { char ch_alpha[6] = "sbc10"; for (int i=0; i<6; i++) { if (isxdigit(ch_alpha[i])) cout << ch_alpha[i] << " is hexadecimal digit" << endl; else cout << ch_alpha[i] << " is not hexadecimal digit" << endl; } cout << endl; } |
Вывод данных:
is not hexadecimal digit b is hexadecimal digit c is hexadecimal digit l is hexadecimal digit 0 is hexadecimal digit is not hexadecimal digit |
Tolower
Прототип функции: int tolower(int c)
Параметр(ы): c=> Символ, который нужно преобразовать в нижний регистр.
Возвращаемое значение:
Возвращает нижний эквивалент c, в противном случае без изменений.
Возвращаемое значение — int и может быть неявно приведено к char.
Описание: Преобразует заданный символ c в его эквивалент в нижнем регистре. Если преобразование невозможно для данного символа, то возвращается неизменное значение (c).
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <iostream> #include <cctype> using namespace std; int main() { char ch_alpha[4] = "STH"; cout<<ch_alpha<<" converted to lowercase:"; for (int i=0; i<4; i++) { cout<<(char)tolower(ch_alpha[i]); } cout << endl; } |
Вывод данных:
STH converted to lowercase:sth |
Toupper
Прототип функции: int toupper(int c)
Параметр(ы): c=>символ, который нужно преобразовать в верхний регистр.
Возвращаемое значение:
Возвращает верхний эквивалент c, в противном случае без изменений.
Возвращаемое значение — int и может быть неявно приведено к char.
Описание: Преобразует заданный символ c в его эквивалент в верхнем регистре. Если преобразование для данного символа невозможно, то возвращается неизменное значение (c).
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <iostream> #include <cctype> using namespace std; int main() { char ch_alpha[10] = "tutorials"; cout<<ch_alpha<<" converted to lowercase:"; for (int i=0; i<10; i++) { cout<<(char)toupper(ch_alpha[i]); } cout << endl; } |
Вывод данных:
tutorials converted to lowercase: TUTORIALS |
Итог
На этом мы заканчиваем нашу статью по символьным функциям в C++.
В этой статье мы показали различные функции, которые принимают один символ, а затем либо классифицируют его, либо преобразуют. В нашей следующей статье мы углубимся в детали представления и реализации строковых массивов в C++.
С Уважением, МониторБанк